标题：精通Qt4编程(第2版)
图书基本信息
书名：精通Qt4编程（第2版）  作者：蔡志明 卢传富 李立夏 等编著
ISBN 978-7-121-12525-6
出版日期：2011年2月 
定价：89.00元
宣传语
畅销书升级版
诸多大型项目工程开发经验的凝聚之作
内 容 简 介
本书详细介绍了Qt的基础知识和GUI编程应用，举例翔实，内容全面，基本涵盖了Qt编程的各个方面。全书共分3篇25章，包括Qt GUI编程的基础知识（对话框、基础窗口部件、程序主窗口、布局管理）、中级编程（2D绘图、拖放操作与剪贴板、文件处理、网络编程、多线程、事件机制、数据库及Qt风格）和高级应用（XML应用、模型/视图结构、高级绘图、进程间通信、Qt插件和脚本应用、多媒体、浏览器、动画及状态机等）。同时，在相关章节也穿插了一些重要的知识点，包括元对象系统、属性系统、对象树机制、信号/槽机制等。
本书体系完整，内容实用，可以作为Qt初学者的入门进阶书籍，适合具有一定开发经验的Qt程序员作为参考书，也可以作为大中专院校相关专业及培训机构的教材。
前 言
本书第1版出版已近三年了，其间Qt也发生了较大的变化。最重要的就是Trolltech公司被Nokia收购，由此改变了Qt发展的趋势。Qt走向了更为开放，功能更丰富，支持的平台更多的道路。
Qt新特点
归纳起来有以下几点：
1．支持LGPL（GNU Lesser General Public License）协议。
我们知道，当一个自由软件使用GPL声明时，该软件的使用者有权重新发布、修改该软件，并得到该软件的源代码；但只要使用者在其程序中使用了该自由软件，或者是使用修改后的软件，那么使用者的程序也必须公布其源代码，同时允许别人发布、修改。也就是说，使用GPL声明下的自由软件开发出来的新软件也一定是自由软件。LGPL是GPL的变种，与 GPL的最大不同是，可以私有使用LGPL授权的自由软件，开发出来的新软件可以是私有的而不需要是自由软件。Qt支持LGPL协议后，用户使用开源版Qt获得了更大的自由度。
2．开放了Qt源代码库，并鼓励社区参与。
以前Qt虽是开源代码，但源码库并未开放，现在在可以自由地访问Qt源码库，并可以为Qt做出自己的贡献。Qt的源码库使用分布式版本控制系统Git管理，也可以通过浏览器浏览。这里有Qt，Qt Creator，Qt Jambi等多个项目等着您的参与！开放源代码库，拉近了Qt开发者与用户之间的距离。
3．彻底开放了原来商业平台的代码。
原来只能在商业版中使用的ActiveQt，Oracle数据库驱动等，现在都能在开源版中使用。开源版和商业版不再是两个源码不同的版本，只是遵守的协议不同而已。开源版用户终于能享受全功能Qt了。同时在Windows平台上也开放了Visual Studio插件和相应支持，开源版用户在Windows上除使用MinGW开发外又多了一项选择，使用Visual Studio开发Qt应用。
4．对嵌入式平台支持力度加大。
Qt除了继续支持嵌入式Linux平台外，增加了对Windows CE，Symbian，Maemo 5等嵌入式平台的支持。与此同时，推出了Qt Mobility软件包，对手机上的GPS设备、多媒体、短信、电话等功能提供了较完善的支持，让用户开发手机应用更为便利。同时Qt还对实时操作系统VxWorks和QNX提供了社区支持，为平淡无奇的嵌入式图形系统打了一剂强心针。
5．最后就是不断添加到Qt软件包中的功能，并行计算框架、动画框架、状态机框架、多媒体框架等几个框架为Qt增色不少。
浏览器、XQuery、XPATH、XSLT、多点触摸、图形效果支持提升了Qt的能力。当然还有其他功能和性能改进不能一一列出，这都使得Qt 4走向了成熟。Qt 4.7中更是引入了类似于Windows ZAML的声明式UI编程的功能，该功能命名为Qt Quick。
总之，在几年前，我们还需要向周围的人介绍什么是Qt，如今只需要对如何更好地应用Qt进行交流。在国内图书市场上，也出现了为数不少Qt相关的书籍。为了与时俱进，本书也根据新版的Qt 4.7 进行了修改，推出了第2版，但本版中不包括Qt Quick编程介绍。
本书的结构
本书共25章，每章讨论一个专题。章节安排上基本采用循序渐进、由浅到深的原则。但最后的高级篇中的章节没有很强的关联，可以按照随意的顺序阅读。每章内容及作者分述如下：
篇章 章 名 作者 内 容 简 介 页码
初级篇 第1章 Qt初步实践 卢传富 建立了第一个较简单的Qt应用程序，在GUI用户界面中显示一行中文 2
第2章 对话框
——QDialog 卢传富 介绍了Qt的对话框类QDialog，实现了一个自定义的登录对话框，举例说明了Qt提供的内建对话框类的应用 14
第3章 基础窗口部件——QWidget 卢传富
蔡志明 首次引入Qt设计器的使用，绘制并实现了一个查找文件功能的部件，介绍了Qt应用程序中使用ui文件的基本方法以及Qt样式表；较深入地分析了Qt对象模型的一些基本知识，涉及信号和槽机制、Qt元对象系统、属性系统和对象树机制，以及部件类型和部件的几何布局等内容 36
第4章 程序主窗口
—— QMainWindow 卢传富 Qt应用程序的主窗口是由多个部件/组件构成的框架，本章通过一个简单文本编辑器的例子，介绍了主窗口的菜单、工具条、中心部件、锚接部件和状态条，并通过Qt设计器绘制和手写代码两种方法实现了简单文本编辑器主窗口界面的排布和管理 87
第5章 布局管理 卢传富 布局管理是GUI应用程序编程的一个重要方面。Qt提供了多种布局管理部件，包括Qt布局管理器、分裂器、栈部件、工作空间部件和多文档区部件等。本章一一介绍了这些部件，并举例说明了它们在图形用户界面编程中的应用 124
中级篇 第6章 2D绘图 蔡志明 本章内容较多，包括Qt的绘图要素、图形变换与坐标系统、绘图设备、图像处理、图像打印等 158
第7章 Graphics View框架 蔡志明 讲解Qt图形系统的模型视图框架——Graphics View框架。包括体系结构、坐标系统、编程方法和图形打印 211
第8章 拖放操作和剪贴板 蔡志明 本章简要地说明了基于MIME的拖放操作和剪贴板的使用，关于Graphics View框架的拖放操作也在本章 225
第9章 文件处理 蔡志明 介绍了Qt的文件处理，包括基于流的文本文件和二进制文件处理，文件信息和目录操作，目录以及文件的变化监控，文件引擎的编写 232
续表 
篇章 章 名 作者 内 容 简 介 页码
中级篇 第10章 网络 李立夏 介绍了Qt的网络处理，包括编写常见的FTP、HTTP、UDP和TCP程序，以及访问底层网络接口信息和扩展Qt网络模块功能的方法 241
第11章 多线程 李立夏 介绍了Qt的多线程处理，包括两方面内容：传统的线程操作，以及与Qt事件机制相关的操作。这一章还涉及较多的基本概念，并逐一做了介绍 278
第12章 事件处理 李立夏 介绍了Qt的事件处理模型，详细介绍了在Qt程序设计中处理事件的五种方法，并讨论了如何利用Qt事件机制加快用户界面响应速度 308
第13章 数据库 李立夏 介绍了Qt的数据库处理，重点介绍了如何在Qt中使用SQL语句进行数据库操作和如何利用QSqlTableModel这类高层次类进行常见的数据库编程 323
高级篇 第14章 界面风格 王燕琴
蔡志明 讲解了Qt的风格原理，从简单到复杂应用Qt自定义风格。Qt的样式表的原理和应用 354
第15章 XML 蔡志明 对Qt的三种XML解析方式（DOM、SAX和基于流的解析）进行了比较和举例。还讲解了如何使用API写XML文件。XMLPatterns模块的应用，包括XSLT、XQuery、XML模式 413
第16章 模型/视图结构 蔡志明 阐述了Qt的模型/视图结构，分别对模型视图的三个组成部分（模型、视图和代理）进行了介绍，演示了如何自定义这些组成部分，并简要说明了拖放以及选中操作 443
第17章 高级绘图 蔡志明 叙述了在Qt中如何使用OpenGL绘图，对基本的OpenGL绘图进行了讲解，介绍了矢量图型文件SVG的读写操作 486
第18章 进程与进程间通信 李立夏 介绍进程和进程间通信的知识，重点介绍了Qt中桌面环境下基于D-Bus的多进程应用程序开发 502
第19章 Qt插件 蔡志明 说明了Qt的插件系统，并对Qt Designer插件、数据库插件、风格插件进行了较详细的介绍 528
第20章 脚本——QtScript 蔡志明 这是Qt 4.3中引入的最新内容，使得Qt能够支持ECMAScript脚本。本章简要地举例说明了在Qt中如何使用脚本，如何将C++对象暴露给脚本 546
第21章 国际化 骆艳 本章包括编码的处理，Qt Linguist的使用步骤，动态语言切换的内容 557
第22章 Qt单元测试框架 蔡志明 本章阐述了如何使用QTestLib框架进行数据测试、GUI测试和性能测试 568
第23章 动画与状态机框架 蔡志明 简要介绍了动画与状态机框架，并结合两个框架的应用实例进行了讲解 576
第24章 WebKit与多媒体 蔡志明 介绍了浏览器和Phonon多媒体框架，给出了Phonon多媒体播放实例的实现过程 595
第25章 嵌入式Qt 蔡志明 简要地讲解了在Window Mobile和嵌入式Linux上开发嵌入式图形应用的方法，还给出了嵌入式Qt裁剪的方法 607
附录A~D 蔡志明 附录中包括Qt在Linux、Windows上的安装，VS2008、Eclipse、Qt Creator集成开发环境的使用，qmake的基本应用，Qt资源 619
如何获取源代码
由于Qt是跨平台的，因此书中的内容应用能够在Windows、Linux、UNIX和Mac OS上运行，书中的程序可能在下列平台之一上编写：Windows XP/Vista、Linux（OpenSuSE、Fedora Core等）。因此书中的屏幕截图可能来源于其中的任何一种操作系统。
要获取本书的源代码，可以访问博文视点资讯有限公司网站获取：
致谢
与电子工业出版社孙学瑛编辑是第二次合作了，孙编辑对本书的关心和认真细致的工作，使本书能够及时出版，再次表示诚挚的谢意。
蔡志明 卢传富 李立夏
2010年9月30日于武汉
目 录
初 级 篇
第1章 Qt初步实践 2
1.1 第一个Qt程序 2
1.1.1 建立主程序 2
1.1.2 建立工程 3
1.1.3 编译/运行第一个Qt应用程序 8
1.1.4 第一个Qt程序的代码分析 9
1.2 使用Qt布局管理器 11
1.3 关联操作 12
1.4 小结 13
第2章 对话框—— QDialog 14
2.1 自定义对话框 14
2.1.1 建立新类 14
2.1.2 添加子窗口部件 16
2.2 加入主程序 22
2.3 Qt内建（built-in）对话框 25
2.4 小结 35
第3章 基础窗口部件—— QWidget 36
3.1 Qt设计器绘制窗口部件 36
3.1.1 Qt设计器基础 36
3.1.2 绘制窗口部件 41
3.2 程序中引入自定义窗口部件 49
3.2.1 直接使用方式 49
3.2.2 单一继承方式 51
3.2.3 多继承方式 54
3.3 Qt的信号和槽机制 55
3.3.1 基本原理 55
3.3.2 设计信号和槽 58
3.3.3 信号和槽的自动关联 66
3.4 窗口标志及几何布局 66
3.4.1 窗口标志 67
3.4.2 窗口部件的几何布局 69
3.5 Qt对象模型 77
3.5.1 元对象系统 78
3.5.2 属性系统 79
3.5.3 对象树 82
3.6 隐式共享 85
3.7 小结 86
第4章 程序主窗口——QMainWindow 87
4.1 QMainWindow主窗口框架 87
4.2 Qt设计器绘制主窗口 88
4.2.1 菜单 91
4.2.2 工具栏 94
4.2.3 中心部件 97
4.3 代码创建主窗口 99
4.3.1 创建资源文件 99
4.3.2 定义主窗口类 99
4.4 锚接部件 104
4.5 状态栏 107
4.6 实现文本编辑器功能 109
4.7 多文档 120
4.8 打印文档 122
4.9 小结 123
第5章 布局管理 124
5.1 Qt布局管理器——QLayout 124
5.1.1 Qt布局管理器简介 124
5.1.2 布局管理器及窗口部件大小
策略的应用 128
5.2 分裂器部件QSplitter 137
5.3 栈部件QStackedWidget 138
5.4 工作空间部件QWorkspace 139
5.5 多文档区部件QMdiArea 153
5.6 小结 155
中 级 篇
第6章 2D绘图 158
6.1 Arthur绘图基础 158
6.1.1 绘图 158
6.1.2 绘图设备 182
6.2 坐标系统与坐标变换 183
6.2.1 坐标系统 183
6.2.2 坐标变换 183
6.3 用不同的字体 184
6.4 绘图路径——QPainterPath 188
6.5 QImage与QPixmap绘图设备 190
6.5.1 QImage 190
6.5.2 Pixmap 192
6.6 组合模式绘图 201
6.7 小结 210
第7章 Graphics View框架 211
7.1 Graphics View概述 211
7.1.1 Graphics View体系结构 211
7.1.2 Graphics View坐标系统 212
7.1.3 深入Graphics View 213
7.2 图形效果 221
7.3 图形图像打印 222
7.3.1 普通打印过程 222
7.3.2 特殊窗口部件的打印 223
7.4 小结 224
第8章 拖放操作和剪贴板 225
8.1 拖放操作 225
8.1.1 拖放操作 225
8.1.2 定义新的拖放操作类型 228
8.1.3 Graphics View框架下的拖放操作 228
8.2 使用剪贴板 230
8.3 小结 231
第9章 文件处理 232
9.1 读写文本文件 232
9.2 操作二进制文件 234
9.3 临时文件 236
9.4 目录操作和文件管理 236
9.4.1 目录操作 236
9.4.2 文件管理 238
9.5 监视文件系统变化 238
9.6 文件引擎 240
9.7 小结 240
第10章 网络 241
10.1 FTP客户端 241
10.2 HTTP客户端 250
10.3 UDP应用 254
10.4 TCP应用 258
10.5 高级应用 269
10.5.1 底层操作 269
10.5.2 使用代理 272
10.5.3 扩展Qt网络功能 272
10.5.4 效率问题 276
10.6 小结 277
第11章 多线程 278
11.1 启动一个线程 278
11.2 线程互斥与同步 282
11.2.1 临界区问题 282
11.2.2 使用QMutex 283
11.2.3 使用QSemaphore 284
11.2.4 使用QWaitConditon 286
11.3 线程的其他问题 289
11.3.1 优先级问题 289
11.3.2 死锁及优先级反转问题 292
11.3.3 本地存储问题 294
11.4 Qt的线程机制 295
11.4.1 可重入与线程安全 295
11.4.2 线程与事件循环 296
11.4.3 线程与信号/槽机制 297
11.4.4 多线程网络示例 298
11.5 并行计算 302
11.5.1 利用QtConcurrent启动线程 302
11.5.2 图片浏览器示例 303
11.6 小结 307
第12章 事件处理 308
12.1 事件机制 308
12.1.1 事件来源与类型 308
12.1.2 事件处理方法 309
12.2 事件处理器 310
12.3 事件过滤器 315
12.4 加快用户界面响应 318
12.4.1 使用processEvents()函数 318
12.4.2 使用定时器 320
12.5 小结 322
第13章 数据库 323
13.1 连接数据库 323
13.2 常用数据库操作 328
13.2.1 使用SQL语句 328
13.2.2 事务操作 330
13.2.3 使用SQL模型类 331
13.2.4 数据表示 335
13.3 Qt数据库应用 337
13.3.1 使用嵌入式数据库 337
13.3.2 使用Oracle数据库 340
13.4 小结 352
高 级 篇
第14章 界面风格 354
14.1 使用Qt风格 354
14.2 简单自定义风格 355
14.2.1 界面设计 355
14.2.2 自定义界面外观 356
14.2.3 换肤 372
14.3 Qt风格原理 376
14.3.1 风格元素 377
14.3.2 风格选项 381
14.3.3 风格函数 383
14.3.4 风格调色板 384
14.3.5 风格绘制过程 386
14.4 高级自定义风格 390
14.5 Qt样式表 407
14.5.1 样式表语法 407
14.5.2 样式表的应用 409
14.6 小结 412
第15章 XML 413
15.1 DOM 413
15.1.1 DOM入门 413
15.1.2 使用DOM 414
15.1.3 使用DOM写XML文件 417
15.2 SAX 420
15.3 基于流的XML API 425
15.4 QtXmlPatterns模块 431
15.4.1 XSLT 431
15.4.2 XQuery 433
15.4.3 XML Schema 437
15.5 小结 442
第16章 模型/视图结构 443
16.1 模型/视图结构与MVC设计模式 443
16.1.1 模型 444
16.1.2 视图 444
16.1.3 代理 445
16.2 使用已有的模型视图类 445
16.2.1 使用已有的模型和视图类 445
16.2.2 QListWidget、QTreeWidget和QTableWidget 447
16.3 模型（Models） 459
16.3.1 模型索引 459
16.3.2 模型角色 460
16.3.3 自定义模型 461
16.3.4 代理模型 464
16.4 视图（Views） 469
16.4.1 自定义视图 469
16.4.2 数据-窗口部件映射 469
16.5 代理（Delegates） 475
16.5.1 使用已有的代理 475
16.5.2 自定义代理 475
16.6 拖放与选中 481
16.6.1 拖放操作 481
16.6.2 选中模式 484
16.7 小结 485
第17章 高级绘图 486
17.1 3D绘图——使用OpenGL 486
17.1.1 创建OpenGL窗口 486
17.1.2 着色 490
17.1.3 3D和旋转 491
17.1.4 纹理贴图 495
17.2 SVG 498
17.2.1 绘制SVG图形 498
17.2.2 生成SVG文件 500
17.3 小结 501
第18章 进程与进程间通信 502
18.1 使用QProcess 502
18.2 Linux进程间通信 505
18.3 共享内存与本地Socket 506
18.4 新型进程间通信——D-Bus 512
18.4.1 D-Bus简介 513
18.4.2 接口与适配器 514
18.4.3 QtDBus应用实例 517
18.5 小结 527
第19章 Qt插件 528
19.1 Qt插件开发基础 528
19.2 Qt设计器插件 529
19.2.1 使用Scratchpad 529
19.2.2 提升自定义窗口部件 530
19.2.3 Qt设计器插件开发 531
19.3 编写数据库插件 538
19.4 自定义风格插件 542
19.5 小结 545
第20章 脚本——QtScript 546
20.1 执行ECMAScript脚本 546
20.2 QtScript中的信号和槽 547
20.3 使用JavaScript操作Qt对象 550
20.4 基于Prototype的继承 554
20.5 QtScript调试器 555
20.6 小结 556
第21章 国际化 557
21.1 Unicode与字符编码 557
21.1.1 Unicode 557
21.1.2 汉字编码 558
21.1.3 编码转换 558
21.2 Qt Linguist 561
21.2.1 发布管理器 561
21.2.2 翻译器 563
21.2.3 加载翻译文件 566
21.3 语言切换 566
21.4 小结 567
第22章 Qt单元测试框架 568
22.1 QTestLib框架 568
22.1.1 QTestLib 568
22.1.2 第一个Qt单元测试 569
22.2 数据驱动测试 570
22.3 GUI测试 572
22.3.1 仿真GUI事件 572
22.3.2 重放GUI事件 573
22.4 基准测试 574
22.5 小结 575
第23章 动画与状态机框架 576
23.1 动画框架 576
23.2 状态机框架 578
23.3 实例分析 582
23.4 小结 594
第24章 WebKit与多媒体 595
24.1 WebKit 595
24.1.1 基于WebKit的浏览器 595
24.1.2 添加OpenSSL支持 596
24.1.3 Qt WebKit编程 597
24.2 Phonon多媒体框架 597
24.2.1 Phonon体系结构 597
24.2.2 Phonon媒体播放器 600
24.3 小结 606
第25章 嵌入式Qt 607
25.1 Windows Mobile平台 607
25.1.1 Windows Mobile平台Qt应用开发流程 607
25.1.2 部署Qt应用程序 611
25.1.3 使用移动电话仿真器 613
25.2 嵌入式Linux平台 614
25.2.1 嵌入式Linux平台Qt体系结构 614
25.2.2 开发环境配置 616
25.3 嵌入式Qt的裁剪 618
25.4 小结 618
附录A Qt安装 619
附录B Qt集成开发环境 624
附录C qmake速查 631
附录D Qt资源 636