这几天在论坛看到一个有趣的问题:新人入职公司做C++开发,发现公司用的界面GUI还是微软古老的MFC框架,想问大家MFC是不是已经过时了?是否还有深入学习的必要? 其实,个人觉得在讨论这个问题之前还有一个更宽泛的问题:C++语言本身是否适合做GUI界面?
图形用户界面(Graphical User Interface,简称 GUI),下面介绍一下C++常用的GUI开发框架:
(1) QT
Qt 是Qt Company开发的跨平台C++图形用户界面应用程序开发框架,目前使用很广泛;
支持平台:Windows、Linux、MacOS等等;
网址:https://www.qt.io;
(2) MFC
Windows下的GUI库,使用比较广泛;
支持平台:Windows;
网址:https://www.microsoft.com/zh-cn/;
(3) wxWidgets
wxWidgets是一个C ++库,开发人员可以使用它为Windows,Linux,MacOS和其他平台创建应用程序;
支持平台:Windows、Linux、MacOS;
网址:https://wxwidgets.org
(4) gtkmm
gtkmm 是流行的图形界面库 GTK+的官方 C++ 接口;
支持平台:Windows、Linux、MacOS;
网址:https://www.gtkmm.org;
其他界面库还有:
-
imgui (https://github.com/ocornut/imgui)
-
duilib (https://github.com/duilib/duilib)
-
xcgui (http://www.xcgui.com/)
-
GuiLite (https://gitee.com/idea4good/GuiLite)
至于为什么这么多流行的GUI库都用C++实现,很多原因不是在语言本身的能力上,几个可能的原因是:
1)GUI是个基础构件,用C/C++这种较基础和非常流行的语言来实现的话,可以让这个库被更多的其它语言所使用。
2)原生性。很多实际应用需求可能不允许类似C#语言这种附带一个编译运行时的东西,或者带一个臃肿的Webkit,尤其对互联网客户端来讲,需要发布的东西越小越轻量越好,所以这些公司的客户端基本上都是自己造一个轻量级的DirectUI,只满足自己的需求即可,而不用考虑推广性和普遍性。
3)保留了在性能和抽象之间做权衡的能力。如果采用了HTML/CSS/JS,那么当你需要高性能实时渲染时,可能无法实现。做为一个库来讲的话,用户的应用场景千变万化,必须要为这些可能性保留相关的能力。
总得来说用C++写GUI需要付出更多的努力,但回报也更高,前提是有一个或轮一个靠谱的DSL。事实上HTML/CSS/JS也可以看作是一个DSL,运行在C++写成的解释器(浏览器)上。