logo资料库

QT学习之路(最适合初学者).pdf

第1页 / 共243页
第2页 / 共243页
第3页 / 共243页
第4页 / 共243页
第5页 / 共243页
第6页 / 共243页
第7页 / 共243页
第8页 / 共243页
资料共243页,剩余部分请下载后查看
Qt学习之路(1) 前言
Qt学习之路(2):Hello, world!
Qt学习之路(3):Hello, world!(续)
Qt学习之路(4):初探信号槽
Qt学习之路(5):组件布局
Qt学习之路(6): API文档的使用
Qt学习之路(7): 创建一个对话框(上)
Qt学习之路(8): 创建一个对话框(下)
Qt学习之路(9):深入了解信号槽
Qt学习之路(10): Meta-Object系统
Qt学习之路(11): MainWindow
Qt学习之路(12): 菜单和工具条
Qt学习之路(13): 菜单和工具条(续)
Qt学习之路(14): 状态栏
Qt学习之路(15): Qt标准对话框之QFileDialog
Qt学习之路(16): Qt标准对话框之QColorDialog
Qt学习之路(17): Qt标准对话框之QMeageBox
Qt学习之路(18): Qt标准对话框之QIutDialog
Qt学习之路(19): 事件(event)
Qt学习之路(20): 事件接收与忽略
Qt学习之路(21): event()
Qt学习之路(22): 事件过滤器
Qt学习之路(23): 自定义事件
Qt学习之路(24): QPainter
Qt学习之路(25): QPainter(续)
Qt学习之路(26): 反走样
Qt学习之路(27): 渐变填充
Qt学习之路(28): 坐标变换
Qt学习之路(29): 绘图设备
Qt学习之路(30): Graphics View Framework
Qt学习之路(31): 一个简易画板的实现(QWidget)
Qt学习之路(32): 一个简易画板的实现(Graphics View)
Qt学习之路(33): 国际化(上)
Qt学习之路(34): 国际化(下)
Qt学习之路(35): Qt容器类之顺序存储容器
Qt学习之路(36): Qt容器类之遍历器和隐式数据共享
Qt学习之路(37): Qt容器类之关联存储容器
Qt学习之路(38): model-view架构
Qt学习之路(39): QListWidget
Qt学习之路(40): QTreeWidget
Qt学习之路(41): QTableWidget
Qt学习之路(42): QStringListModel
Qt学习之路(43): QDirModel
Qt学习之路(44): QSortFilterProxyModel
Qt学习之路(45): 自定义model之一
Qt学习之路(46): 自定义model之二
Qt学习之路(47): 自定义Model之三
Qt学习之路(48): 自定义委托
Qt学习之路(49): 通用算法
Qt学习之路(50): QString
Qt学习之路(51): QByteArray和QVariant
Qt学习之路(52): 拖放技术之一
Qt学习之路(53): 拖放技术之二
Qt学习之路(54): 自定义拖放数据对象
Qt学习之路(55): 剪贴板操作
Qt学习之路(56): 二进制文件读写
Qt学习之路(57): 文本文件读写
Qt学习之路(58): 进程间交互
Qt学习之路(59): 编写跨平台的程序
Qt 学习之路 ---整理:DZY 献给自强不息的自学者
Qt 学习之路 DZY 整理 目 录 QT 学习之路 (1) 前言 ....................................................................................................................................................... 4 QT 学习之路 (2) : HELLO, WORLD! ............................................................................................................................ 6 QT 学习之路 (3) : HELLO, WORLD!( 续 ) ................................................................................................................... 13 QT 学习之路 (4) :初探信号槽 ...................................................................................................................................... 16 QT 学习之路 (5) :组件布局 .......................................................................................................................................... 18 QT 学习之路 (6): API 文档的使用 ................................................................................................................................ 22 QT 学习之路 (7): 创建一个对话框 ( 上 ) ........................................................................................................................ 23 QT 学习之路 (8): 创建一个对话框 ( 下 ) ........................................................................................................................ 26 QT 学习之路 (9) :深入了解信号槽 ........................................................................................................................... 31 QT 学习之路 (10): META-OBJECT 系统 ................................................................................................................... 34 QT 学习之路 (11): MAINWINDOW .............................................................................................................................. 35 QT 学习之路 (12): 菜单和工具条 ................................................................................................................................. 38 QT 学习之路 (13): 菜单和工具条 ( 续 ) .......................................................................................................................... 42 QT 学习之路 (14): 状态栏 .............................................................................................................................................. 47 QT 学习之路 (15): QT 标准对话框之 QFILEDIALOG ............................................................................................. 49 QT 学习之路 (16): QT 标准对话框之 QCOLORDIALOG ........................................................................................ 50 QT 学习之路 (17): QT 标准对话框之 QMEAGEBOX ............................................................................................... 52 QT 学习之路 (18): QT 标准对话框之 QIUTDIALOG ................................................................................................ 53 QT 学习之路 (19): 事件 (EVENT) .................................................................................................................................. 56 QT 学习之路 (20): 事件接收与忽略 ............................................................................................................................. 57 QT 学习之路 (21): EVENT() ........................................................................................................................................... 59 QT 学习之路 (22): 事件过滤器 ...................................................................................................................................... 61 QT 学习之路 (23): 自定义事件 ...................................................................................................................................... 63 QT 学习之路 (24): QPAINTER ....................................................................................................................................... 66 QT 学习之路 (25): QPAINTER( 续 ) ................................................................................................................................ 67 QT 学习之路 (26): 反走样 .............................................................................................................................................. 71 QT 学习之路 (27): 渐变填充 ........................................................................................................................................ 74 QT 学习之路 (28): 坐标变换 ........................................................................................................................................ 77 QT 学习之路 (29): 绘图设备 ........................................................................................................................................ 81 第 2 页 共 243 页 整理:DZY
Qt 学习之路 DZY 整理 QT 学习之路 (30): GRAPHICS VIEW FRAMEWORK ............................................................................................ 85 QT 学习之路 (31): 一个简易画板的实现 (QWIDGET) ............................................................................................. 89 QT 学习之路 (32): 一个简易画板的实现 (GRAPHICS VIEW) 100 .............................................................................. QT 学习之路 (33): 国际化 ( 上 109 ) .................................................................................................................................... QT 学习之路 (34): 国际化 ( 下 116 ) ..................................................................................................................................... QT 学习之路 (35): QT 容器类之顺序存储容器 119 ..................................................................................................... QT 学习之路 (36): QT 容器类之遍历器和隐式数据共享 124 .................................................................................... QT 学习之路 (37): QT 容器类之关联存储容器 129 ..................................................................................................... QT 学习之路 (38): MODEL-VIEW 架构 133 .................................................................................................................. QT 学习之路 135 (39): QLISTWIDGET ........................................................................................................................... QT 学习之路 (40): QTREEWIDGET 138 .......................................................................................................................... QT 学习之路 (41): QTABLEWIDGET 142 ....................................................................................................................... QT 学习之路 (42): QSTRINGLISTMODEL 144 .............................................................................................................. QT 学习之路 (43): QDIRMODEL 150 ............................................................................................................................... QT 学习之路 (44): QSORTFILTERPROXYMODEL 157 ............................................................................................... QT 学习之路 (45): 自定义 MODEL 之一 161 ................................................................................................................. QT 学习之路 (46): 自定义 MODEL 之二 169 ................................................................................................................. QT 学习之路 (47): 自定义 MODEL 之三 175 ................................................................................................................. QT 学习之路 (48): 自定义委托 184 ................................................................................................................................. QT 学习之路 (49): 通用算法 193 ...................................................................................................................................... QT 学习之路 196 (50): QSTRING ...................................................................................................................................... QT 学习之路 (51): QBYTEARRAY 和 200 QVARIANT ................................................................................................. QT 学习之路 (52): 拖放技术之一 203 ............................................................................................................................. QT 学习之路 (53): 拖放技术之二 208 ............................................................................................................................. QT 学习之路 (54): 自定义拖放数据对象 214 ................................................................................................................ QT 学习之路 (55): 剪贴板操作 221 ................................................................................................................................. QT 学习之路 (56): 二进制文件读写 227 ......................................................................................................................... QT 学习之路 (57): 文本文件读写 231 ............................................................................................................................. QT 学习之路 (58): 进程间交互 234 ................................................................................................................................. QT 学习之路 (59): 编写跨平台的程序 239 .................................................................................................................... 第 3 页 共 243 页 整理:DZY
Qt 学习之路(1) 前言 我们所使用的 Qt,确切地说也就是它的 GUI 编程部分。C++的 GUI 编程同 Java 不同:GUI 并不是 C++标准的一部分。所以,如果使用 Java,那么你最好的选择就是 AWT/Swing,或者 也可以使 SWT/JFace,但是,C++的 GUI 编程给了你更多的选择:wxWidget, gtk++以及 Qt。 这几个库我都有接触,但是接触都不是很多,只能靠一些资料和自己的一点粗浅的认识说一 下它们之间的区别(PS: 更详尽的比较在前面的文章中有)。   首先说 wxWidget,这是一个标准的 C++库,和 Qt 一样庞大。它的语法看上去和 MFC 类似, 有 大量的宏。据说,一个 MFC 程序员可以很容易的转换到 wxWidget 上面来。wxWidget 有一 个很大的优点,就是它的界面都是原生风格的。这是其他的库所不能做到的。wxWidget 的运 行效率很高, 据说在 Windows 平台上比起微软自家的 MFC 也不相上下。   gtk++其实是一个 C 库,不过由于 C++和 C 之间的关系,这点并没有很 大的关系。但是, gtk++是一个使用 C 语言很优雅的实现了面向对象程序设计的范例。不过,这也同样带来了一 个问题——它的里面带有大量的类型转换的宏来 模拟多态,并且它的函数名“又臭又长(不 过这点我倒是觉得无所谓,因为它的函数名虽然很长,但是同样很清晰)”,使用下划线分 割单词,看上去和 Linux 如出一辙。由于它是 C 语言实现,因此它的运行效率当然不在话下 。 gtk++并不是模拟的原生界面,而有它自己的风格,所以有时候就会和操作系统的界面显得 格格不入。   再来看 Qt,和 wxWidget 一样,它也是一个标准的 C++库。但是它的语法很类似于 Java 的 Swing,十分清晰,而 且 SIGNAL/SLOT 机制使得程序看起来很明白——这也是我首先选 择 Qt 的一个很重要的方面,因为我是学 Java 出身的 :) 。不过,所谓“成也萧何,败也萧 何”,这种机制虽然很清楚,但是它所带来的后果是你需要使用 Qt 的 qmake 对程序进行预 处理,才能够再使用 make 或者 nmake 进行编译。并且它的界面也不是原生风格的,尽管 Qt 使用 style 机制十分巧妙的模拟了本地界面。另外值得一提的是,Qt 不仅仅运行在桌面环境 中,Qt 已经被 Nokia 收购,它现在已经会成为 Symbian 系列的主要界面技术——Qt 是能够 运行于嵌入式平台的。
Qt 学习之路 DZY 整理   以往人们对 Qt 的授权多有诟病。因为 Qt 的商业版本价格不菲,开源版本使用的是 GPL 协议。但是现在 Qt 的开源协议已经变成 LGPL。这意味着,你可以将 Qt 作为一个库 连接到一 个闭源软件里面。可以说,现在的 Qt 协议的争议已经不存在了——因为 wxWidgets 或者 gtk+ 同样使用的是类似的协议发布的。    在 本系 列文 章中 ,我 们 将 使用 Qt4 进 行 C++ GUI 的 开发 。我 是 参 照着 《 C++ GUI Programming with Qt4》一书进行学习的。其实,我也只是初学 Qt4,在这里将这个学习笔记 记下来,希望能够方便更多的朋友学习 Qt4。我是一个 Java 程序员,感觉 Qt4 的一些命名规 范以及约束同 Java 有异曲同工之妙,因而从 Java 迁移到 Qt4 似乎困难不大。不过,这也主 要是因为 Qt4 良好的设计等等。    闲话少说,还是尽快开始下面的学习吧!   第 5 页 共 243 页 整理:DZY
Qt 学习之路 DZY 整理 Qt 学习之路(2):Hello, world!   任何编程技术的学习第一课基本上都会是 Hello, world!,我也不想故意打破这个惯例 ——照理说,应该首先回顾一下 Qt 的历史,不过即使不说这些也并无大碍。   或许有人总想知 道,Qt 这个单词是什么意思。其实,这并不是一个缩写词,仅仅是因 为 它 的 发 明 者 , TrollTech 公 司 的 CEO , Haarard Nord 和 Trolltech 公 司 的 总 裁 Eirik Chambe-Eng 在联合发明 Qt 的时候并没有一个很好的名字。在这里,字母 Q 是 Qt 库中所有类 的前缀——这仅仅是因为在 Haarard 的 emacs 的 字体中,这个字母看起来特别的漂亮;而 字母 t 则代表“toolkit”,这是在 Xt( X toolkit )中得到的灵感。   顺便说 句,Qt 原始的公司就是上面提到的 Trolltech,貌似有一个中文名字是奇趣科 技——不过现在已经被 Nokia 收购了。因此,一些比较旧的文章里面会 提到 Trolltech 这个 名字。   好了,闲话少说,先看看 Qt 的开发吧!事先说明一下,我是一个比较懒的人,不喜欢 配置很多的东西,而 Qt 已经提供了一个轻量级的 IDE,并且它的网站上也有 for Eclipse 和 VS 的开发插件,不过在这里我并不想用这些大块头 :)    Qt 有两套协议——商业版本和开源的 LGPL 版本。不同的是前者要收费,而后者免费, 当然,后者还要遵循 LGPL 协议的规定,这是题外话。    Qt 的网址是 https://qt.nokia.com/downloads,不过我打开这个站点总是很慢,不知 道为什么。你可以找到大大的 LGPL/Free 和 Commercial,好了,我选的是 LGPL 版本的,下 载包蛮大,但是下载并不会很慢。下载完成后安装就可以了,其它不用管了。这样,整个 Qt 的开发环 境就装好了——如果你需要的话,也可以把 qmake 所在的目录添加进环境变量, 不过我就不做了。   安装完成后会有个 Qt Creator 的东西,这就是官方提供的一个轻量级 IDE,不过它的功 能还是蛮强大的。运行这个就会发现,其实 Qt 不仅仅是 Linux KDE 桌面的底层实现库。而且 是这个 IDE 的实现 :) 这个 IDE 就是用 Qt 完成的。     Qt Creator 左 面 从 上 到 下 依 次 是 Welcome( 欢 迎 页 面 , 就 是 一 开 始 出 现 的 那 个 ) ; Edit(我们的代码编辑窗口);Debug(调试窗 口);Projects(工程窗口);Help(帮助,这个 第 6 页 共 243 页 整理:DZY
Qt 学习之路 DZY 整理 帮助完全整合的 Qt 的官方文档,相当有用);Output(输出窗口)。   下 面我们来试试我们的 Hello, world! 吧!     在 Edit 窗 口 空 白 处 点 右 键 , 有 New project... 这 里 我 们 选 第 三 项 , Qt Gui Application。      然后点击 OK,来到下一步,输入工程名字和保存的位置。 第 7 页 共 243 页 整理:DZY
Qt 学习之路 DZY 整理   点击 Next,来到选择库的界面。这里我们系统默认为我们选择了 Qt core 和 GUI,还记 得我们建的是 Gui Application 吗?嗯,就是这里啦,它会自动为我们加上 gui 这个库。现 在 应 该 就 能 看 出 , Qt 是 多 么 庞 大 的 一 个 库 , 它 不 仅 仅 有 Gui , 而 且 有 Network,OpenGL,XML 之类。不过,现在在这里我们不作修改,直接 Next。 第 8 页 共 243 页 整理:DZY
分享到:
收藏