1.8为什么选择 Qt
前面说了这么多 Qt 的介绍,相信一定有很多朋友还是要问,那么我们为什么要选择 Qt 做开发呢,它到底有哪些突出的优势呢,下面就是笔者给出的答案。
Qt 是基于 C++ 的一种语言扩展(Extention)
C/C++ 目前还是一种很多人都在学习的语言. Qt 的好处就在于 Qt 本身可以被称作是一 种 C++ 的延伸。Qt 的类都是用 C++ 写出来的。这也就是说, Qt 本身已经继承了 C++的快 速、简易、面向对象等许多的优点。
Qt 具有非常好的可移植性(Portable)
Qt 不只是可以在 Linux 中运行,也同样可以运行在 Microsoft Windows 、Mac OS X 等多种不同的平台中。这也意味者 ,利用 Qt 编写出来的应用程序,在几乎不用修改的情况下, 就可以同时在多种平台中运行。 Qt 的应用非常之广泛,从 Linux 到 Windows ,从 x86到 Embedded 等都有大量 Qt 应用的成功范例。
Qt 支持跨平台构建(Cross-Platform Builds)
编写用于多平台的软件是单调乏味的,且可能随时出现错误。维护编制文件更是如此,尤其是当不同的编译器和平台组合需要若干个编制文件时。通过 qmake 工具,Qt 能够很好地面对这一挑战。这个工具可以为目标平台生成准确无误的编制文件。
Qt 是开源软件(Open Source)
Qt 产品提供的是采用双重授权的软件许可模式。在该双重授权模式下, Qt 产品不仅可 在获得商业许可下针对专利软件开发,而且还可以在 GPL(通用公共许可证,版本 2 或版本 3)下用于开发免费和开源软件。
Qt 架构健壮,性能强大(powerful)
Qt 已由成千上万商业与开放源应用程序员,在多个操作系统与编译器上进行了测试, 奠定了高性能应用程序的基础。此外,Qt 运行时无需依赖“虚拟器”,模拟层或大容量的运行时间环境。它如本地化的应用程序一样,能够直接写入低级的图形函数,因而使用 Qt 开发的应用程序能以源代码速度执行。
Qt 使用起来简便高效(concise)
Qt 统一的跨平台 API 让程序员们集中精力致力于可增值的技术革新,而无须担心维护 和管理现有应用程序多版本的基础结构与界面。 因此 Qt 开发人员仅需要学会一种 API 来 写入应用程序,该程序便可在任何地方运行。
Qt Software 投入了相当大的努力使得 Qt 使用起来尽可能简单和直观。来自世界各地 的客户反馈普遍认为 Qt 编程简单而有趣;而对于商务应用而言, Qt 可以转换为更多的功 能,并且在保持质量性能的情况下,只需更少的维护工作。
总之,Qt 可以跨平台、不依赖虚拟机机制,速度和性能不会比同类型的 Java, .NET(C#)差,这就是程序员选择 Qt 的最直接的理由了。
阅读材料
GTK+, Qt, wxWidgets 比较简评
这位来自台湾的朋友把 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 的发展,但其中的大部分论据仍然极有说服力,清晰而简明的指出了几大类库的优 缺点,读者朋友可以从中获益。