我选择 wxWidgets 而不是 Qt 作为图形用户界面框架的一些想法

我以前曾有几年时间用 Delphi 和 VCL 来开发工作和业余项目。
近年来我由于各种原因放弃了 Delphi/BCB,转用 C++ 开发兴趣项目。是的,兴趣而已,我从来没有机会在我的日常工作中使用C++。
当涉及到图形用户界面的项目,我需要一个 C++ GUI 框架。

我选择 C++ GUI 框架的标准:

  1. 免费 。这是必须的。特别是它应该可以免费静态链接。因此,MFC 不在我的名单里了。MFC 不在 VC 的 Express 版本里。

  2. 开源的 。这样我可以阅读代码来学习和调试。闭源库等于是一个黑匣子,我不知道它如何工作,并可能完全失去控制。

  3. 不错的 GUI 可视化设计工具 。不错意味着,至少我应该可以可视化设计最常用的组件形式(不仅是对话框,也包含顶级窗口)。在我看来,图形用户界面的设计应该可视化。手动编码的图形用户界面枯燥而且容易出错。我希望我的时间和精力都投入到编写核心逻辑而不是界面上。基于这个标准,很多开源框架就从我的名单中消失了。

  4. 不错的应用程序大小 。一个带有10M的运行时 DLL 的记事本应用程序应该不是一个好主意。对于大项目这可能不是问题。但重要的是我的项目通常是小型或中型的,永远不会非常大。

  5. 易于安装/配置/构建 。在我的印象中(可能错误的),开放源码库很难编译。需要很多的技巧和核心向的改变。我并不想成为某些库的核心,我只想使用开源代码,仅此而已。

  6. 易于集成到任何常用的编译器和集成开发环境 。我的主要的开发环境是 VC 2008 Express,我真的很喜欢它。如果我不得不使用其它 IDE,效率可能会打折。此外,我需要使用 MinGW 的 GCC 来测试 C++ 语法。因此,该框架应至少在VC Express和 GCC 上工作。

  7. 代码质量要好 。我没有期望一个无 bug 的库,但我也不能接受一个满是 bug 的库。

  8. 文档 。我不指望能有 MSDN 那样全面的文档,但一个API文档是必须的。

  9. 社区支持 。每当我有一个问题,我需要一个地方问,而且要在合理时间内得到解答。

  10. 用户群 。一些较为知名的公司应该用该框架开发过应用程序,以此显示该库的可依赖度。

  11. 跨平台的 。这是一个额外要求,但我会很高兴拥有它。

  12. 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 库,那么你需要找符合你要求的,因为你可能有不同要求。

你可能感兴趣的:(我选择 wxWidgets 而不是 Qt 作为图形用户界面框架的一些想法)