图形界面库Windows Forms、 MFC、WTL、 WxWidgets、Qt、GTK 综合比较见下表:

总结:

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,多国语言没问题。

Windows Forms、MFC、WTL、WxWidgets、Qt、GTK综合比较相关推荐

  1. Windows Forms、 MFC、WTL、 WxWidgets、Qt、GTK

    图形界面库Windows Forms. MFC.WTL. WxWidgets.Qt.GTK 综合比较见下表: 总结: GTK+主要用在X Window上,整个设计的架构和许多概念和MFC以及一般 Wi ...

  2. 开源自己用python封装的一个Windows GUI(UI Automation)自动化工具,支持MFC,Windows Forms,WPF,Metro,Qt...

    首先,大家可以看下这个链接 Windows GUI自动化测试技术的比较和展望 . 这篇文章介绍了Windows中GUI自动化的三种技术:Windows API, MSAA - Microsoft Ac ...

  3. windows卸载qt_如何在Qt中显示一个窗口并在关闭后立即将其删除?

    作为一个非常简单的例子,我想在按下按钮时在Qt中显示一个对话框.通常的模式(在我正在申请的应用程序中)似乎如下: class MainWindow { ... private slots: butto ...

  4. Spread for Windows Forms高级主题(3)---单元格的编辑模式

    理解单元格的编辑模式 通常情况下,当终端用户双击单元格时,编辑控件将允许用户在该单元格中输入内容.在一个单元格中编辑的能力被称为编辑模式.一些属性和方法可以用来自定义编辑模式的使用. 当一个单元格处于 ...

  5. System.Windows.Forms.Timer在线程中的注意事项

    在WinForm中使用System.Windows.Forms.Timer对象,如果是在单线程中使用,则直接设置该对象的Enabled属性值即可启动计时器,但如果是在多线程窗体中在多线程引发的事件中调 ...

  6. Spread for Windows Forms高级主题(5)---数据处理

    2019独角兽企业重金招聘Python工程师标准>>> 使用表单的API处理数据 你可以将数据以有格式或无格式字符串或者数据对象的形式填充到单元格中.将数据填充到单元格的最好方式取决 ...

  7. Create C++ Windows Forms Application in Visual Studio 2017

    Background: From Windows Forms Application in Visual C++ ???!!!!: "MS removed the WinForms C++/ ...

  8. Spread for Windows Forms高级主题(7)---自定义打印的外观

    2019独角兽企业重金招聘Python工程师标准>>> 表单打印的多个部分都可以进行自定义,大多数的自定义选项存在于PrintInfo对象中.大多数打印选项是在PrintInfo对象 ...

  9. System.Windows.Forms.ListView : Control

    #region 程序集 System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 ...

最新文章

  1. python如何实现别人调用自己的API
  2. 用c#开发微信(1)服务号的服务器配置和企业号的回调模式 - url接入
  3. Web开发系列 - JSON
  4. 路由有类查找和无类查找方式
  5. 迁移数据库到SQL on Linux Docker
  6. 965. 单值二叉树
  7. vue中Npm run build 根据环境传递参数方法来打包不同域名
  8. redis循环键_javascript – for循环从redis延迟获取项目
  9. FFmpeg如何设置编码器私有参数
  10. VB简易绘图板的实现
  11. 如何合并多个excel表
  12. 交换机的全trunk模式(native vlan)
  13. 计算机网络原理第二章答案
  14. 搭建自适应网站(自适应网站设计)
  15. TFTP 简单文件传输协议
  16. 国密SM2算法的只求理解不求甚解 (4/5)SM2算法加解密协议
  17. AVR mega 128 开发板方案 avr开发板 ATmega128 学习板
  18. 使用eclipse搭建Python开发环境
  19. 数据库实验设计——朋友圈【概念篇】
  20. 第一周 用HTML制作的所有网页

热门文章

  1. windows下关于Objective-C开发环境的配置
  2. 如何有效申请TI的免费样片
  3. 《Python Cookbook 3rd》笔记(2.10):在正则式中使用 Unicode
  4. java数据包解析_请教http请求数据包如何解析 重组
  5. 如何查看软连接,以及相关注意事项
  6. java蓝桥杯 试题-基础练习-十六进制转八进制
  7. c++面向对象高级编程 学习十四 引用
  8. 集市中迷失的一代:FreeBSD核心开发者反思开源软件质量
  9. 《 图解 HTTP 》读书笔记
  10. vscode 编辑器快捷键