两个框架我用的都不多,但是觉得他们都很简单。
有人说wxWidgets相同的控件在windows和Linux表现可能不一样,这个是正常的,影响应该也不至于太大。大家都在说wxWidgets不值得学习了,因为生态没有Qt繁荣,有道理,但是我的看待角度不一样。
1、Qt虽然也是开源的,但只有在发布版本的时候才发布代码,有人会说Qt代码托管在Qt自建网站[https://codereview.qt-project.org]上,但是这里的代码是下载不下来的(反正用git clone下来的是空仓库)。wx代码托管在github上,wx社区也在这个仓库上开发的,更透明一些,wx的开发也很活跃。看Qt的官方网站,一直在淡化开源这件事,只是在极力推荐大家使用。
2、wx目前仍然可以看作单纯的界面组件,而Qt不是。Qt可以看作操作系统所有API的抽象层,还额外附带了很多其它基础库,目的是为c++提供跨平台的全方位开发库,[https://www.qt.io/features]。这个页面还可以看Qt那个组件用的什么授权协议。使用LGPL协议发布的部分足够一般化应用了。Qt的安装包可以安装所有的组件,很可能用顺手了就侵犯了Qt的商业授权。
3、开发工具方面Qt胜过很多,前面那个features页面也可以看到三个官方提供的工具。wx的开发工具也不少,wxSmith,wxGlade,wxCrafter和wxFormBuilder。wxFormBuilder能生成python和c++的代码。wxFormBuilder还是开源的。
4、架构各有优势,Qt的接口齐全,wx精巧。有界面开发经验的人能想到的接口Qt都提供了,也就是说几乎不用学,直接上手用。wx作为单纯的界面工具,开发工具生成代码后直接填充业务代码就可以了,也没难度。架构上最关键的区域别在于,Qt提供的信号和槽机制是对C++的扩展,需要qmake解析qt代码生成标注c++代码再编译。我认为这里没有必要的,额外带来巨多复杂度,到目前qmake也有很多bug(c++的语法有多复杂不用多说了吧)。总有人认为信号和槽是Qt非常厉害的优势,但是我认为信号和槽是Qt架构上最大的缺陷。
5、bug方面,都多。一开始选择用Qt做这个简单的Gis软件[https://github.com/tgis-top/tGis],用的是Widgets组件,试了很多个Qt发布版本才找到一个停靠窗口没有bug的。目前Qt开源版本没有了长期支持(LTS),在5.9上遇到bug,要么自己改代码,要么买商业授权,要么升级到5.10。
做选择的一定要根据业务需求和发展前景来看,可以说绝大多数场景选择wx和选择qt没有区别,极少数wx无法满足的情况可能需要qt。其实很多软件的生命周期是非常短的,那个顺手用那个,完全不用在意是用wx还是用qt。qt的宣传到位一些,会的人多,一般情况下选择qt不会有啥差子。绝大多数人都不会遇到需要自己改qt代码的情况。
对于我个人来说还是准备用wx了,原因比较奇怪。
1、wx代码量少,架构简洁,整个代码我自己能搞得定。那一天需要在全新的CPU上运行的话,CPU厂家提供编译器,我自己改改代码就能迁移过去。Qt太庞大了,尤其是那个信号和槽,要让qmake在新平台上好好工作是非常麻烦的,即使迁移过去了,还得把开发工具也迁移过去,纯粹手撸Qt代码是不可能的。wx纯手撸代码就OK了。
2、wx可以满足目前的应用,开发效率也不低,wx的稳定性也可以。要得就是一个GUI,不要那么一大坨。
GUI还有两个开源选择
[https://www.fltk.org]
[http://www.fox-toolkit.org]
这两个也非常轻量级,往嵌入式领域迁移也是非常方便的,将Qt用到嵌入式领域式没啥必要的。都嵌入式了,要啥复杂UI,简单的直接手撸,复杂的上rtliux和ucos操作系统,他们都有现成的开源UI组件。