C++下WindowsForms+MFC+WTL+wxWidgets+Qt+GTK比较

出自:www.cppblog.com/lingjingqiu/archive/2009/01/06/71363.html


界面库名称 Windows Forms
接口设计 接口优秀。C++下使用CLI扩展,其它语言为原生支持。
界面编辑器 界面编辑器完整,包括布局、属性、消息关联的完整设置。不可预览。
高级布局功能 Table Layout,Splitter Layout,Flow Layout等,Anchor和Dock机制。多分辨率界面下表现良好。
平面绘制 GDI+,面向对象的2D绘制接口,使用简便。
平台兼容性 需要.Net平台支持。WIndows或Linux(Mono,非官方支持),支持Windows CE
语言支持 C++/CLI, 支持.net的语言。
IDE兼容性 仅VS。
视图-模型分离机制 布局和视图方案建立在代码中。部分组件支持Model-View架构。
运行时 需要部署对应的.net
其它 商业协议

界面库名称 MFC
接口设计 基于宏和虚函数,使用特殊格式注释,使用自定义的RTTI系统。类接口设计优良。通过回调函数和虚继承重载调用客户代码。
界面编辑器 基于资源编辑器,仅能对空间基本布局和少量属性进行调整。不可预览。
高级布局功能 缺乏高级布局功能,多分辨率需要是手工或程序中调整。
平面绘制 GDI及GDI封装,可选GDI+
平台兼容性 Windows,Windows CE
语言支持 C++ Only,支持COM时可以实现Binary级别复用。
IDE兼容性 仅Visual Studio
视图-模型分离机制 使用资源保存控件的基本控件布局,提供Doc-View机制和控件数据交换支持视图分离。
运行时 需要部署MFC运行时库。
其它 商业协议

界面库名称 WTL
接口设计 基于模板和虚函数。类接口类似于MFC。需要使用多重继承。通过模板特化和回调函数与客户代码交互。
界面编辑器 基于资源编辑器,仅能对空间基本布局和少量属性进行调整。不可预览。
高级布局功能 缺乏高级布局功能,多分辨率需要是手工或程序中调整。
平面绘制 GDI及GDI封装,可选GDI+
平台兼容性 Windows,Windows CE
语言支持 C++ Only,支持COM时可以实现Binary级别复用。对COM的支持比MFC完善很多。
IDE兼容性 Visual Studio,Windows下支持标准的C++编译器。
视图-模型分离机制 使用资源文件保存空间布局。
运行时
其它 自由协议

界面库名称 wxWidget
接口设计 宏,自定义RTTI。使用回调函数与用户代码交互。
界面编辑器 无官方界面编辑器。可使用第三方界面编辑器。部分编辑器具有完整的所见即所得功能,且具有预览能力。
高级布局功能 使用Sizer实现多分辨率的布局。功能偏弱。
平面绘制 wxDC等。
平台兼容性 Windows,Linux,Unix,MacOS等
语言支持 C++, .NET, Python,Lua,Ruby等
IDE兼容性 良好的编译器兼容性,缺乏IDE继承。
视图-模型分离机制 可以将界面属性生成到代码中,也可以使用XML格式保存。
运行时 wx的动态链接库或静态链接。
其它 自由协议

界面库名称 Qt
接口设计 使用宏和自定义的RTTI。使用Singal-Slot机制实现用户代码交互。可通过继承实现扩展。
界面编辑器 Qt Designer,具备完整的所见即所得编辑功能。可预览界面。
高级布局功能 具备完整的布局功能。多分辨率/多平台下表现良好。
平面绘制 QCanvas等。
平台兼容性 Windows,Linux,Unix,MacOS等。
语言支持 C++,Python等
IDE兼容性 可集成到Eclipse和VS
视图-模型分离机制 使用资源文件保存界面信息。部分组件具备Model-View-Delegate架构
运行时 qt的动态链接库。
其它 开源协议+商业协议

界面库名称 GTK+
接口设计 使用signal-slot机制完成用户代码交互。
界面编辑器 GLADE,具备所见即所得的界面编辑功能
高级布局功能 Layout Containers,具备较完整的布局能力。
平面绘制 GTK Graphics Context
平台兼容性 Windows,Linux,Unix,MacOS等。
语言支持 C,C++,Python,.NET等。
IDE兼容性 未知
视图-模型分离机制 使用代码完成界面设置。部分组件具备Model-View架构。
运行时 GTK Runtime
其它 开源协议

除了WTL外,其余各界面库均有完整及时的文档和手册。

总结:

GTK+主要用在X Window上,整个设计的架构和许多概念和MFC以及一般 Windows 上的程序开发大异其趣,入门门槛较高,而且最主要的特色是,它用不具有物件功能的纯C 语言,模拟物件导向。所以写起来比较复杂艰涩,而且充满大量巨集,使用和除错都不是很容易,但优点则是可以用C,不需C++,如果和Win32 SDK比较,不会难学多少,缺点是不易上手使用,而且文件比较缺,架构又非常复杂,且提供的东西比起其它无所不包的 library,是简陋了一点,函数命名又臭又长。
对于简单的程序,GTK+会显得太复杂,但是当你开始想扩充其它library也都没提供的进阶功能,就会开始赞叹GTK+ 的架构严谨,还有超乎想像的高度弹性。同样的东西要用 MFC来做反而会要人命,并且多国语言的支持良好,内部也全面使用UTF-8,相容性好,要是unicode能够习惯的话,GTK+值得推荐,但不建议学,毕竟不好学,要用到熟会需要比较久,而且那样很多C++的功能会用不到。GTK+有C++版本叫做GTK–,没用过但看文件觉得,并没有比gtk+简单到哪里去。 因为 gtk+本来就是物件导向,所以即使换了c++ 语言,写起来架构还是差不多的。
另外,gtk+有Windows 版本,但缺点是,执行缓慢,不稳定,而且介面是使用gtk+自己的,不是使用 Windows 内建的Native原生图形介面,看起来会不太习惯。 Mac OS X 下可用 X11 来执行gtk+,但那样出来的程式是长得像 UNIX 程序,而不是美美的OS X Aqua外观。
wxWidgets和MFC最接近,已有十余年历史,命名习惯或架构都高度相似,会MFC几乎不用重新学习。此外,它的物件封装比MFC要好,提供的功能也多上太多,又跨平台。一般知名的MFC程式都会选择用wxWidgets改写,来快速移植原程式到其它平台,例如 eMule用wxWidgets移植出aMule,xMule, 还有在开发中的Filezilla 3…等。而它最主要的特色是,它是跨平台的Native GUI toolkit,在各种平台上都可写出使用该平台内建Native原生图形介面的程式。在Windows 上就长得跟其它Windows程式一样,在 Linux 下就使用 gtk+的图形介面,在 Mac OS X 下就可以使用华丽的Aqua 外观风格,这点是非常强悍。 不像gtk+到其它系统都还是只能用gtk+自己,缺点是,中文支持在有些地方会出问题,例如剪贴簿的操作,得自己patch,但仍然相当推荐,即使是个庞大的library,效能依旧不会太差,尤其在 Windows 上执行速度并不输 MFC,与其学MFC,不如学wxWidgets。
Qt的功能,应该是这三者加上MFC之中最强大的,文件也很完整,又有 RAD 工具可以辅助开发,并且有商业公司做强力后盾。不但有Windows/X Window/Mac版本,甚至还有嵌入式系统可用的版本,稳定性还不错,物件封装也算良好,资源比 GTK+ 或wxWidgets多得非常多,而且发行公司提供了相当多范例,算是一家以开放原始码成功营利的模范公司。 知名的KDE整个是用它开发,证明了它的稳定性和强大功能。缺点是如果你用它开发非 GPL 开放程序码的软件,必须以极昂贵的金额购买商业版本。而它的图形介面并不完全是 Native GUI,只是透过theme 去模拟系统上的标准 GUI,所以看起来很像,却会有些地方可以明显看出破绽。执行速度缓慢还有过于庞大则是另一个问题。
虽然封装得很好文件也齐全,并不代表它就很容易学。还有一个严重问题是,它写的不是标准C++,它使用的signal/slot机制必须透过Qt提供的preprocessor,处理过才可以转送给编译器,这部份可能被限定用qmake,算是一个可惜的地方,不过瑕不掩瑜,还是很推荐。忘了说,它内部也是unicode,多国语言没问题。

你可能感兴趣的:(C++下WindowsForms+MFC+WTL+wxWidgets+Qt+GTK比较)