什么是 Qt?在 Qt 的官方主页这样介绍着:
Qt 是一个跨平台应用程序和 UI 开发框架。使用 Qt 您只需一次性开发应用程序,无须重新编写源代码,便可跨不同桌面和嵌入式操作系统部署这些应用程序。[1]
恩,听起来不错,不是吗?但作为一个谨慎的技术人员,我们在选择一门技术的时候还需要获得更多的信息,毕竟学习一门技术是要花费大量的时间的。
接下来看看 Qt 的优势具体在哪里:
- 成熟的跨平台方案
- 开源和商业支持
- 众多成功例子
- 完善的开发 SDK 工具链
- 丰富的函数库
- Qt 很有趣
成熟的跨平台方案
Qt 支持主流的操作系统,包括:嵌入式 Linux、Mac OS、Windows、Linux/X11、Windows CE/Mobile、Symbian、Maemo/Meego。
Qt 框架首度为公众可用是在 1995 年 5 月。它最初由 Haavard Nord(奇趣科技公司的CEO)和 Eirik Chambe-Eng(奇趣科技公司总裁)开发而成,其第二位商业用户是欧洲航天局。经过约 20 年的开发,Qt 框架今已发展到 4.7 版本,成为一个成熟的应用程序开发框架。[2]
开源和商业支持
Qt 早前为奇趣科技公司(Trolltech)的产品,同时提供开源版本(GPL)和商业版本。在 2008 年 6 月 17 日奇趣科技公司被诺基亚公司收购后不久,Qt 增加了 LGPL 开源协议的支持。
GNU/Linux 社区曾经不满于 Qt 的双授权协议(虽然我认为这是不必要的),以致催生了 Gtk 项目。而在 Qt 提供了 LGPL 版本后,已经消除了 Qt 非自由的忧虑。同时 Qt 还拥有诺基亚强大资金援助为后盾的商业支持。
阿,多么美好!
众多成功例子
Qt 确实广受应用,并且有众多成功的软件项目。
最巨大的基于 Qt 开发的项目可能就是 KDE 桌面环境了,这是 Linux 上功能全面、广受欢迎的桌面环境。而基于 KDE 桌面环境开发的应用软件,实际上也是在用 Qt。如果你并不熟悉 KDE,这里还可以列举很多流行的软件:Google Earth,Skype,Virtual Box,SMPlayer……并且,你会发现基于 Qt 的软件通常是跨平台的。
诺基亚与英特尔合作的手持设备操作系统——Meego——也是以 Qt 作为界面部分的基础,Meego 系统将会作为诺基亚移动设备下一代操作系统。
完善的开发 SDK 工具链
相对于其他开源社区维护的图形框架,Qt 由于有着商业公司的支持,提供了一整套更完善的 SDK 工具链。其中包括:
- qmake:项目和生成管理工具,相当于 CMAKE 等工具,专为 Qt 项目设计,配置更简洁。
- Qt Creator:轻量级 Qt IDE,整合了代码编辑、项目管理、文档查询、可视化界面设计、调试等功能。
- Qt Designer:单独进行可视化界面设计的工具,开发时间比 Qt Creator 早,大部分功能在 Qt Creator 中已经实现。
- Qt Assistant:离线查询 Qt 所有 API 文档和范例的工具,在 Qt Creator 中已经实现。
- Qt Linguist:辅助非技术人员对 Qt 程序中的显示文本添加国际化翻译的工具。
- Visual Studio 和 Eclipse 集成:可以在 Visual Studio 和 Eclipse 中安装插件,使其成为 Qt IDE。
使用开源版本的 Qt 就能获得接近 Windows 下 Visual Studio 或者 Mac 下 Xcode 开发工具的舒适体验。[3]
丰富的函数库
Qt 不仅仅是图形框架,其庞大的类库为跨平台的软件开发提供了便利。Qt 中的模块包括:
- 图形用户界面
- 多线程
- 网络连接
- XML
- 数据库
- 脚本引擎
- 2D 和基于 OpenGL 的 3D 图形
- Phonon 多媒体框架
- WebKit 集成
- 嵌入式设备的紧凑视窗系统
在项目配置中,可以选择需要链接哪个 Qt 模块,保证编译过程较快且编译出来的二进制文件足够精简。
Qt 很有趣
奥,我们已经听过一大堆开发工具声称自己很有趣了,但即使如此,我还是要说:Qt 很有趣。
Qt 构建于 C++ 之上,同时对 C++ 进行了扩充(例如 信号-槽 机制),并且避免让开发者接触 C++ 中苦涩难用的部分(例如要求你写模版类或者回调函数)。Qt 用 QObject 继承机制近似的实现了自动内存回收,也提供了在对象被销毁时自动置 0 的智能指针 QPointer,内置的容器类实现了“写时复制”……等等,在使用 Qt ,你会发觉 C++ 也可以如此轻松。
当我还在大学读书的时候,在毕业设计截止前夕曾经辅助一个同学(没错,就是 Kv 同学)从零开始学习 Qt,为的是给他的网络监控软件加上图形界面。 当时的时间很紧,因为要预留时间写论文,实际上只有两周左右时间让他熟悉 Qt。结果平时不热衷编程的 Kv 同学不但按时完成了设计,还说了一句:“Qt 太好用了!”这让我发觉Qt 的确是有趣的,而不是我个人的错觉。
总之,Qt 既是强大的生产工具,又能让编程人员感到有趣。如果还抱有怀疑的话,不妨写一点 Qt 的代码吧。
————————————————
[1] http://qt.nokia.com/products-cn
[2] 部分引用《C++ GUI Qt 4 编程》序内容。
[3] 可以在 http://qt.gitorious.org 获得 Qt 官方维护的项目源代码。



