Qt和wxWidgets 比较 以及其他GUI库

这个,我个人觉得Qt比wxwidgets有前途多了,无论是资源还是人数,还是社区.关键是QT有商业公司和社区支持.
现在的QT无孔不入,win,linux,IOS,android,嵌入式板子,pyQT(python版本)等等...
还有就是QT的那一套玩意,designer,linguist等等和VS集成得相当好(有QT官方插件适用于VS2010以上版本),用VS写QT那才叫爽.而且VS完爆QT creator....


 

wxWidgets/wɪksˈwɪdʒɪts/,原名wxWindows[1])是一个开放源代码跨平台对象工具集(widget toolkit),其可用来创建基本的图形用户界面(GUI)。wxWidgets由Julian Smart于1992年首先开发。

wxWidgets标榜使用其库所开发的软件只需要对源代码做少量更改(或者完全不用更改),就能在各种不同的作业平台上编译并运行。目前可支持WindowsApple MacintoshLinuxUnix(转译成X11GTK+Motif等库)、OpenVMS、以及OS/2嵌入式的版本也正在开发中[2]

库本身使用C++语言开发,但也有其它不同编程语言绑扎,例如:Python(wxPython)、Lua(wxlua)、Perl(wxPerl)、Ruby(wxRuby)、Smalltalk(wxSmalltalk)、Java(wx4j)、甚至是JavaScript(wxjs)等。

使用wxWidgets开发的软件不需经过诸如虚拟机的技术就能运行,虽然在不同平台可使用相近甚至相同的源代码,但其最终转译并生成的可执行文件是完全基于作业平台的。

另外,wxWidgets不只可以用来创建GUI,它也内置了基于ODBC数据库函数、进程间通信以及网络socket函数等的支持。

wxWidgets的许可许可证是经过开放源代码促进会认证,其本质等同于GNU宽通用公共许可证(LGPL)。然而一个例外是wxWidgets许可允许修改者以自己的许可证发布。

QT

Qt/ˈkjuːt/,发音同“cute”[4][5][6])是一个跨平台C++应用程序开发框架。广泛用于开发GUI程序,这种情况下又被称为部件工具箱。也可用于开发非GUI程序,比如控制台工具和服务器。Qt被用于OPIESkypeVLC media playerAdobe Photoshop ElementsVirtualBoxMathematica[7]以及被Autodesk [8][9]欧洲空间局[10]梦工厂[11][12]GoogleHP[13]KDE卢卡斯影业[14]西门子公司[15]沃尔沃集团[16]华特迪士尼动画制作公司[17]三星集团[18]飞利浦[19]Panasonic [20]所使用。

它是Digia公司的产品。Qt使用标准的C++和特殊的代码生成扩展(称为元对象编译器(Meta Object Compiler, moc))以及一些。通过语言绑定,其他的编程语言也可以使用Qt。

Qt是自由且开放源代码的软件,在GNU宽通用公共许可证(LGPL)条款下发布。所有版本都支持广泛的编译器,包括GCC的C++编译器和Visual Studio

Haavard NordEirik Chambe-Eng于1991年开始开发“Qt”,1994年3月4日创立公司,最早名为Quasar Technologies,然后更名为Troll Tech,之后又再次更名为Trolltech,中文名是“奇趣科技”,2008年6月17日被NOKIA公司收购,以增强该公司在跨平台软件研发方面的实力,更名Qt Software

该工具包名为Qt是因为字母Q在Haavard的Emacs字体特别漂亮,而“t”代表“toolkit”,灵感来自Xt,X toolkit[21]

2009年5月11日,诺基亚Qt Software宣布Qt源代码管理系统面向公众开放,Qt开发人员可通过为Qt以及与Qt相关的项目贡献代码、翻译、示例以及其他内容,协助引导和塑造Qt未来的发展。为了便于这些内容的管理,Qt Software启用了基于Git和Gitorious开源项目的Web源代码管理系统。

在推出开放式Qt代码库的同时,Qt Software在其网站发布了其产品规划(Roadmap)。其中概述了研发项目中的最新功能,展现了现阶段对Qt未来发展方向的观点,以期鼓励社区提供反馈和贡献代码,共同引导和塑造Qt的未来。2012年8月9日,Digia宣布已完成对诺基亚Qt业务及软件技术的全面收购,并计划将Qt应用到AndroidiOSWindows 8平台上

跨平台的C++ GUI工具库很多,可是应用广泛的也就那么几个,Qt、wxWidgets便是其中的翘楚
这里把GTK+排除在外,以C实现面向对象,上手相当困难,而且Windows平台下执行相当慢且不稳定。

Qt和wxWidgets各有各的优点,也各有各的缺点,各有各的适合应用点。
工作环境和爱好限制,个人曾经分别使用过Qt和wxWidgets,
到现在,就个人而言,选择在一般程序方向采用wxWidgets,在手机应用程序方向采用Qt。

先说版权:
Qt,是芬兰的TrollTech公司研发的,现在属于Nokia,一直奉行的是双LICENSE策略,一个是商业版,一个是免费版:商业版的LICENSE就不说了,免费版的LICENSE,4.5版本之前一直采用GPL,意味着采用Qt的程序要么是商业软件,要么就是GPL软件,这就造成了虽然出了个著名的KDE,可惜应用范围还是受限,否则的话,应用应该更广阔点;不过还好,Nokia收购了之后意识到这个问题,4.5版本之后采用了LGPL,其他开发人员可以发布基于免费Qt库连接的商业软件了。

wxWidgets,一直奉行的是LGPL LICENSE。

再评评各自的优缺点:
Qt,一直以来开发公司作为商业公司进行运作,以客户需求为目标,提供了一系列完整的文档和RAD工具,并提供最为完整的平台支持;
对开发人员而言,Qt库本身,也是所有的GUI工具库中最为面向对象化的,同时也是最为稳定的。

罗列一下:
Qt的优点:
1. 支持的平台最多
2. 商业化支持
3. 完整的文档和RAD工具
4. 最为面向对象
5. 世界上最为成功的手机厂商支撑,对于移动终端的支持最为完善
Qt的缺点:
1. 使用的是非标准C++
2. 每个平台不是"Native GUI"
3. 过于庞大且运行缓慢
4. 与其它库不是很兼容(主要是STL之类的兼容问题)
5. 基本只能使用特定的qmake工具(其它工具经过良好的修改也可以,不过相当于重新编写一个qmake,是否值得)

wxWidgets,一直以来的LGPL发布,相当开放,积累了相当一部分研究用户,与现有各类工具库无缝连接地非常好;
同时可惜的是没有非常强大的正规商业化运作,可靠性、资源丰富性远比不上Qt。
还是罗列一下:
wxWidgets的优点:
1. 开放,对于各类第三方库的良好兼容(TAO工具中的Naming_Service Viewer就是采用wxWidgets的)
2. 支持各平台的"Native GUI"
3. 虽然有庞大的库,运行效果极为显著
4. 对各类现有工具的支持(笔者就采用MPC一站式产生所有项目的编译工程)
5. 偏MFC,对于Windows平台MFC程序的跨平台迁移,具有天然的优势
6. XRC,则提供了代码和设计分离的便利,程序员专注整体开发,UI设计群体则提供运行期界面、多语言版本支持功能等
wxWidgets的缺点:
1. 由于是偏MFC,则面向对象封装做得不是非常好
2. 相对缺乏的文档、资源
3. 缺乏很好的商业化支持,如果商业软件出问题需要支持,稍微麻烦点

总之:
在采用第三方工具库的复杂PC应用环境,有一定的底子,wxWidgets是不二的选择
在只需采用Qt单一工具库的应用环境,Qt是个不错的选择;特别是类似于手机这种嵌入式设备环境,由于Nokia的加入,Qt更值得一用

世界上的 GUI 库多如牛毛,有的跨平台,有的专属于某个操作系统;有的只有 UI 功能,有的还融合了网络通信、多媒体处理、数据库访问等底层功能。

Windows 下的 GUI 库

Windows 下的 GUI 解决方案比较多:

  • 基于 C++ 的有 Qt、MFC、WTL、wxWidgets、DirectUI、Htmlayout;
  • 基于 C# 的有 WinForm、WPF;
  • 基于 Java 的有 AWT、Swing
  • 基于 Pascal 的 有Delphi;
  • 基于Go语言的有 walk 和 electron;
  • 还有国内初露头角的 aardio;
  • Visual Basic 曾经很流行,现在逐渐失去了色彩;
  • 如果你有 Web 开发经验,也可以基于 Webkit 或 Chromium 将网页转换为桌面程序。

没有哪一种方案能够独霸 Windows,使用比较多的编程语言是 C++、C#、Java。

用 Qt 来开发 Windows 桌面程序有以下优点:

  • 简单易学:Qt 封装的很好,几行代码就可以开发出一个简单的客户端,不需要了解 Windows API。
  • 资料丰富:资料丰富能够成倍降低学习成本,否则你只能去看源码,关于 DirectUI、Htmlayout、aardio 的资料就很少。
  • 漂亮的界面:Qt 很容易做出漂亮的界面和炫酷的动画,而 MFC、WTL、wxWidgets 比较麻烦。
  • 独立安装:Qt 程序最终会编译为本地代码,不需要其他库的支撑,而 Java 要安装虚拟机,C# 要安装 .NET Framework。
  • 跨平台:如果你的程序需要运行在多个平台下,同时又希望降低开发成本,Qt 几乎是必备的。

Qt 和 MFC

读者经常将 MFC 和 Qt 进行对比,MFC 只能应用在 Windows 平台,而 Qt 是跨平台的,一次编写,到处运行。

另外,Qt 已经封装了底层细节,学习 Qt 将会非常简单;而 MFC 只是给 Windows API 加了一层包装,不了解 Windows API 也学不好 MFC,大家普遍反映 MFC 难学。

我们不能简单地说 Qt 好还是 MFC 好,两者都有用武之地;但是初学者学习 Qt 会比较简单,不用应付那些烦人的 Windows API,很快就能开发出带有漂亮界面的应用程序。

Linux 下的 GUI 库

Linux 下常用的 GUI 库有基于 C++ 的 Qt、GTK+、wxWidgets,以及基于 Java 的 AWT 和
Swing。其中最著名的就是 Qt 和 GTK+:KDE 桌面系统已经将 Qt 作为默认的 GUI 库,Gnome 桌面系统也将 GTK+
作为默认的 GUI 库。

有兴趣的读者请猛击《Linux桌面系统》了解更多关于 KDE 和 Gnome 的内容。

相比 GTK+,Qt 的功能更加强大,更新也很快,比较受人们追捧。

这位来自台湾的朋友把GTK+, Qt, wxWidgets比较分析得相当到位。很明显的,MFC注定将淡出江湖了。下面就是几个跨平台库的横向比较。

    之前因为把 MFC痛骂了一顿,有网友在询问其它 GUI toolkit的相关事项,所以小弟分享一下个人对三大知名图形界面库的简短评论,以下纯属个人主观意见,不是专业人士,所知有限,望前辈不吝指正或补充。

1.先讲 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 外观。

2.再说wxWidgets

    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。

3.最后看看Qt

    Qt 的功能,应该是这三者加上 MFC 之中最強大的,文件也很完整,又有 RAD 工具可以辅助开发,并且有商业公司做強力后盾。不但有 Windows/X Window/Mac 版本,甚至还有嵌入式系統可用的版本,稳定性还不错,物件封装也算良好,资源比 GTK+ 或wxWidgets 多得非常多,而且发行公司提供了相当多范例,算是一家以开放原始码成功赢利的模范公司。 知名的 KDE整个是用它开发,证明了它的稳定性和強大功能。缺点是如果你用它开发非 GPL 开放程式码的软体,必須以极昂贵的金额,购买商业版本。 而它的图形界面并不完全是 "Native GUI",只是透过 theme 去模拟系統上的标准 GUI,所以看起來很像,却会有些地方可以明显看出破綻。 执行速度缓慢还有过于庞大则是另一个问题。 虽然封装得很良好文件也齐全,并不代表他就很容易学还有一个严重问题是,它写的不是标准C++,它使用的 signal/slot 机制必須透过 Qt提供的 preprocessor 处理过才可以转送給编译器,这部份可能被限定用 qmake,算是一个可惜的地方,不过暇不掩瑜,还是很推荐。忘了说,它內部也是unicode,多国语言没问题。

    以上三套只是简单介紹,其中 Qt 的程式我沒有实际完整开发过,但明显的三套都远远比只能在 Windows 上用,功能少 Bug 多,难学难用,几乎无多国语言支援的 MFC 要強。 三套可跨平台的 library 大家可自行选择,只能用在 Windows  MFC 就不用考虑了。

    这篇短评发表出来有些时日了,其中的有些观点(比如Qt的授权问题)已经落后于现在的Qt的发展,但其中的大部分论据仍然极有说服力,清晰而简明的指出了几大类库的优缺点,读者朋友可以从中获益。

 

 

 

转载:

https://www.cnblogs.com/gaowengang/p/9465232.html

https://www.shuzhiduo.com/A/x9J2v71NJ6/

http://c.biancheng.net/view/3876.html

猜你喜欢

转载自blog.csdn.net/shanandqiu/article/details/112523494