## 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 的发展,但其中的大部分论据仍然极有说服力,清晰而简明的指出了几大类库的优 缺点,读者朋友可以从中获益。
- 第 1 章 走近 Qt
- 1.1 Qt 简介
- 1.2 Qt 纪事概览
- 1.3 Qt 套件的组成(以 Qt4.5 为准)
- 1.4 Qt 的授权
- 1.5 Qt 的产品
- 1.6 Qt 的服务与支持
- 1.7 Qt 的最新进展
- 1.8为什么选择 Qt
- 1.9 问题与解答
- 1.10 总结与提高
- 第 2 章 Qt 的安装与配置
- 2.1 获取 Qt
- 2.2 协议说明
- 2.3 安装 Qt
- 2.4 配置 Qt4 环境
- 2.5 问题与解答
- 2.6 总结与提高
- 第 3 章 Qt 编程基础
- 3.1 标准 C++精讲
- 3.2 Windows 编程基础
- 3.3 Linux 编程基础
- 3.4 Mac 编程基础
- 3.5 问题与解答
- 3.6 总结与提高
- 第 4 章 Qt 4 集成开发环境
- 4.1 常见的 Qt IDE
- 4.2 Qt Creator
- 4.3 Eclipse
- 4.5 问题与解答
- 4.6 总结与提高
- 第 5 章 使用 Qt 基本 GUI 工具
- 5.1 使用 Qt Designer 进行 GUI 设计
- 5.2 使用 Qt Assistant 获取在线文档与帮助
- 5.3 使用 Qt Demo 学习 Qt 应用程序开发
- 5.4 问题与解答
- 5.5 总结与提高
- 第 6 章 Qt 4 程序开发方法和流程
- 6.1 开发方法
- 6.2 Hello Qt
- 6.3 几个重要的知识点
- 6.4 问题与解答
- 6.5 总结与提高
- 第 7 章 对话框
- 7.1 QDialog 类
- 7.2 子类化 QDialog
- 7.3 快速设计对话框
- 7.4 常见内建(built in)对话框的使用
- 7.5 模态对话框与非模态对话框
- 7.6 问题与解答
- 7.7 总结与提高
- 第 8 章 主窗口
- 8.1 主窗口框架
- 8.2 创建主窗口的方法和流程
- 8.3 代码创建主窗口
- 8.4 使用 Qt Designer 创建主窗口
- 8.5 中心窗口部件专题
- 8.6 Qt4 资源系统专题
- 8.7 锚接窗口
- 8.8 多文档
- 8.9 问题与解答
- 8.10 总结与提高
- 第 9 章 Qt 样式表与应用程序观感
- 9.1 应用程序的观感
- 9.2 QStyle 类的使用
- 9.3 样式表概述
- 9.4 使用样式表
- 9.5 问题与解答
- 9.6 总结与提高
- 第 10 章 在程序中使用.ui 文件
- 10.1 uic 的使用
- 10.2 Ui_YourFormName.h 文件的组成
- 10.3 编译时加入处理.ui 文件的方法
- 10.4 运行时加入处理.ui 文件的方法
- 10.5 信号与槽的自动连接
- 10.6 问题与解答
- 10.7 总结与提高 本章主要讲解了以下内容:
- 第 11 章 布局管理
- 11.1 基本概念和方法
- 11.2在 Qt Designer 中使用布局
- 11.3 基本布局实践
- 11.4 堆栈布局
- 11.5 分裂器布局
- 11.6 自定义布局管理器
- 11.7 布局管理经验总结
- 11.8 问题与解答
- 11.9 总结与提高
- 第 12 章 使用 Qt Creator
- 12.1 Qt Creator 概览
- 12.2 Qt Creator 的组成
- 12.3 快捷键和常用技巧
- 12.4 Qt Creator 构建系统的设置
- 12.5 处理项目间依赖关系( Dependencies )
- 12.6 Qt 多版本共存时的管理
- 12.7 使用定位器在代码间快速导航
- 12.8 如何创建一个项目
- 12.9 实例讲解
- 12.10 使用 Qt Creator 调试程序
- 12.11 问题与解答
- 12.12 总结与提高
- 第 13 章 Qt 核心机制与原理
- 13.1 Qt 对标准 C++的扩展
- 13.2 信号与槽
- 13.3 元对象系统
- 13.4 Qt 的架构
- 13.5 Qt 的事件模型
- 13.6 构建 Qt 应用程序
- 13.7 总结与提高
- 附录 A qmake 使用指南
- A.1 qmake 简介
- A.2 使用 qmake
- 附录 B make 命令
- B.1 命令解释
- B.2 使用 make 自动构建
- 附录 C Qt 资源
- C.1Qt 官方资源
- C.2 Qt 开发社区