我以前曾有几年时间用 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 库,那么你需要找符合你要求的,因为你可能有不同要求。

本文来源:http://www.cnblogs.com/kbasm/archive/2011/05/04/why-choose-wxwidgets-over-qt.html

转载于:https://blog.51cto.com/2845385/1078020

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

  1. Qt开发技术:图形视图框架(二)场景QGraphicsScene、QGraphicsItem与QGraphicsView详解

    若该文为原创文章,转载请注明原文出处 本文章博客地址:https://hpzwl.blog.csdn.net/article/details/117660217 长期持续带来更多项目与技术分享,咨询请 ...

  2. Qt图形视图框架图片图元QGraphicsPixmapItem

    文章可能被更新,最新地址:http://www.fearlazy.com/index.php/post/107.html 看这个标题还真有点拗口,一句话里出现了四个图字.这句话的关键词是图片,前面讲了 ...

  3. Qt 嵌入式图形开发(入门篇)(转)

    一.Qt/Embedded 开发环境的安装 一般来说,居于Qt/Embedded开发的应用程序最终会发布到安装有嵌入式Linux操作系统 的小型设备上,所以使用装有Linux操作系统的PC机或者工作站 ...

  4. Qt修炼手册6_图形:图形视图框架

    1.前言 主要为了学习可以在GUI上有效显示或管理大量图形对象的API,以及进行显示.扩大.缩小等操作. 2.图形视图框架(Graphics View Framework) 图形视图框架使用BSP树算 ...

  5. 【Qt】2D绘图之图形视图框架(一)

    00. 目录 文章目录 00. 目录 01. 概述 02. 开发环境 03. 场景(Scene) 04. 视图(View) 05. 图形项 06. 附录 01. 概述 在前面讲的基本绘图中,我们可以自 ...

  6. [Qt教程] 第20篇 2D绘图(十)图形视图框架(下)

    [Qt教程] 第20篇 2D绘图(十)图形视图框架(下) 楼主  发表于 2013-5-4 15:43:02 | 查看: 861| 回复: 0 图形视图框架(下) 版权声明 该文章原创于Qter开源社 ...

  7. [Qt教程] 第19篇 2D绘图(九)图形视图框架(上)

    [Qt教程] 第19篇 2D绘图(九)图形视图框架(上) 楼主  发表于 2013-5-4 15:26:20 | 查看: 1798| 回复: 26 图形视图框架(上) 版权声明 导语 在前面讲的基本绘 ...

  8. qt界面嵌入web_使用Qt WebAssembly而不是JavaScript创建Web用户界面

    qt界面嵌入web 当我第一次听说WebAssembly以及使用Qt创建Web用户界面的可能性时(就像在普通C ++中一样),我决定更深入地研究该技术. 我的开源项目Pythonic完全基于Pytho ...

  9. qml延迟代码_选择C而不是QML将您的代码减少80

    qml延迟代码 Many tools rely on web technologies like JavaScript and HTML for mobile app development. But ...

  10. C++图形用户界面开发框架Qt 6.x入门级教程 - 开发工具简介

    Qt旨在一次性开发应用程序和用户界面,然后将它们部署到多个桌面和移动操作系统上. 点击获取Qt下载 Qt Creator Qt Creator 为您提供了在整个应用程序开发生命周期中完成任务的工具,从 ...

最新文章

  1. 微信公众号可快速创建“门店小程序” 不用开发
  2. 新会计科目的编号及内容
  3. 服务器怎么查看性能,查看服务器进程性能查看
  4. Java中的参数传递 --Java
  5. 全新思路!阿里达摩院将Transformer引入在线行为检测!ICCV2021
  6. ORDER BY分类
  7. 简单网络传递加密数据
  8. java算法关灯,关灯游戏的算法 js实现
  9. Leaflet vs. OpenLayers3哪个是更好的JavaScript 地图客户端
  10. 日志显示格式%d{yyyy/MM/dd-HH:mm:ss} [%thread] %-5level %logger- %msg%n
  11. 搜索引擎选型调研文档
  12. js源生实现图片点击弹出放大效果
  13. 优盘显示分区变0字解决方案
  14. 人人都是接口开发大师,这个开源项目花5分钟就可以开发一个API接口
  15. oracle故障分析报告,Oracle 数据库异常宕机错误分析:ORA-01092
  16. 调试HT57DJ100电机和 TB6600步进电机驱动器,滤波片轮驱动
  17. postgresql最全整理资料,PostgreSQL 30天 培训视频(SQL基础,备份恢复,HA,服务端编程,大数据,内核,应用案例)
  18. 适合IT领导者的10项IT管理认证
  19. 电脑开机自动更换壁纸
  20. ug电脑配置推荐ug电脑需要什么配置ug电脑配置清单

热门文章

  1. c语言200行代码大作业含菜单,2018级C语言大作业 - 坦克动荡
  2. Cassandra 数据模型
  3. 用友中标:打造新一代云化ERP 落地大型企业互联网+
  4. 千万千万不要运行的Linux命令
  5. apache安装、配置虚拟主机、配置日志
  6. 高性能迷你React框架anu发布
  7. oracle-pl/sql之二
  8. 在Windows下搭建RocketMQ
  9. Java for selenium(webdriver) 环境搭建
  10. PowerShell 使用PowerTab加强Tab键自动补全