我选择 wxWidgets 而不是 Qt 作为图形用户界面框架的一些想法 Qt框架VC++MFCDelphi
程序员文章站
2022-06-04 20:09:56
...
我以前曾有几年时间用 Delphi 和 VCL 来开发工作和业余项目。
近年来我由于各种原因放弃了 Delphi/BCB,转用 C++ 开发兴趣项目。是的,兴趣而已,我从来没有机会在我的日常工作中使用C++。
当涉及到图形用户界面的项目,我需要一个 C++ GUI 框架。
我选择 C++ GUI 框架的标准:
-
免费
。这是必须的。特别是它应该可以免费静态链接。因此,MFC 不在我的名单里了。MFC 不在 VC 的 Express 版本里。
-
开源的
。这样我可以阅读代码来学习和调试。闭源库等于是一个黑匣子,我不知道它如何工作,并可能完全失去控制。
-
不错的 GUI 可视化设计工具
。不错意味着,至少我应该可以可视化设计最常用的组件形式(不仅是对话框,也包含*窗口)。在我看来,图形用户界面的设计应该可视化。手动编码的图形用户界面枯燥而且容易出错。我希望我的时间和精力都投入到编写核心逻辑而不是界面上。基于这个标准,很多开源框架就从我的名单中消失了。
-
不错的应用程序大小
。一个带有10M的运行时 DLL 的记事本应用程序应该不是一个好主意。对于大项目这可能不是问题。但重要的是我的项目通常是小型或中型的,永远不会非常大。
-
易于安装/配置/构建
。在我的印象中(可能错误的),开放源码库很难编译。需要很多的技巧和核心向的改变。我并不想成为某些库的核心,我只想使用开源代码,仅此而已。
-
易于集成到任何常用的编译器和集成开发环境
。我的主要的开发环境是 VC 2008 Express,我真的很喜欢它。如果我不得不使用其它 IDE,效率可能会打折。此外,我需要使用 MinGW 的 GCC 来测试 C++ 语法。因此,该框架应至少在VC Express和 GCC 上工作。
-
代码质量要好
。我没有期望一个无 bug 的库,但我也不能接受一个满是 bug 的库。
-
文档
。我不指望能有 MSDN 那样全面的文档,但一个API文档是必须的。
-
社区支持
。每当我有一个问题,我需要一个地方问,而且要在合理时间内得到解答。
-
用户群
。一些较为知名的公司应该用该框架开发过应用程序,以此显示该库的可依赖度。
-
跨平台的
。这是一个额外要求,但我会很高兴拥有它。
- Unicode支持 。另一个额外要求,我很高兴能支持 Unicode。
有了这些标准,我发现只有 wxWidgets 和 Qt 是值得考虑的,因为其他库,如 GTKmm,Ultimate++,VCF,SmartWin,难以满足所有要求。 而且 wxWidgets 和 Qt 都有近20年的发展历史,应该比较成熟。
起初我只尝试了Qt的,因为据我所知,wxWidgets是很类 MFC 风格的,而 Qt 的设计更加高级。我觉得可以把 Qt 当成 VCL 风格。
但经过一段时间,我决定放弃 Qt,因为它有几点不足,
-
太难集成到 VC Express 或 Code::Blocks
(一个 IDE 与 GCC 编译器)。对于怎样在 VC Express 上编译 Qt 我实在没有头绪。虽然用 Qt Creator 很容易进行开发,但我不想只局限于任何单一的IDE。我会选择我喜欢的IDE使用。
-
应用程序过大
。对于小型应用程序这是不能接受的。
-
过于庞大和臃肿的一个库
。一个上G字节的库。一个需要几个小时才能建立的库。这意味着,只要有一个错误修复更新,你需要另外的几个小时时间来重新编译。这不是一个GUI框架,而是一个应用框架,超过了我的需要。
- 非标准C++代码总是不好(即使不坏)的 。我真的不喜欢 meta object compiler 的依赖。有很多方法来实现在标准C++信号/槽和RTTI。
在放弃 Qt 之后,我尝试了 wxWidgets,发现我真的很喜欢它,主要体现在几个方面,
-
非常非常轻松地用 VC Express 和 GCC 成功编译
。用VC,只需要几分钟的时间创建整个库。GCC 需时较长,需要大约半小时。
-
应用程序大小还是不错的
,也不算太小,尤其是在2.9.1,程序要大得多。但总体应用程序大小比 Qt 小很多。
-
库很简洁
。它只是一个GUI框架,外加上一些跨平台模块,比如线程,套接字等等。
-
非常好的 GUI 可视化设计工具
(Qt 也有)。事实上,在看 API 文档之前我就尝试过 wxFormBuilder。虽然 wxFormBuilder 远远没有 Delphi 好,但我可以说这已经是一个相当不错的 RAD 工具。我可以放置许多常用的控件,改变布局,定义事件处理程序,这就是我需要的 GUI 设计工具。
-
这个库正在向一个很好的方向演化
。例如,老的 wxWidgets 因为大量 MFC 风格的事件宏而引来非议,但在最新的2.9.1,一个“bind”功能被引入来使用模板和函数对象作为事件处理程序,这是非常现代的 C++ 风格,我认为比 Qt 的 MOC 好多了。此外,我真的很喜欢这个 ribbon 元件,虽然我还没有测试。
- 良好的社区支持 (Qt 也有)。我论坛问了一些问题,都在合理的时间得到答案。
总结:
本文解释了为什么我选择 wxWidgets 而不是 Qt 的原因。仅此而已。我并没有说我更推荐 wxWidgets ,我也没有说 wxWidgets 比 Qt 更好。我只选择了符合我需要的合适的库。如果您正在寻找一个 GUI 库,那么你需要找符合你要求的,因为你可能有不同要求。