出版社:电子工业出版社
年代:2012
定价:69.0
本书讲解如何在流行的开源平台Qt 4.7下用C++进行设计模式的开发。利用大量的例题和习题,全书详细讲解了Qt下的窗件、主窗口、模型与视图、反射、线程、数据库以及多媒体的设计,并针对Qt提供的新功能进行了更新。本书无需读者具备C和C++的编程知识,通过学习,即可精通跨平台的C++编程。
目 录
第一部分 设计模式与Qt
第1章 C++简介 2
1.1 C++概述 2
1.2 C++简史 2
1.3 第一个C++例子 3
1.4 标准输入与输出 5
1.5 函数介绍 7
1.6 qmake,工程文件及Makefile 11
1.7 获得在线帮助 16
1.8 字符串 16
1.9 流 18
1.10 文件流 20
1.11 用于用户输入/输出的Qt对话框 23
1.12 标志符,类型和常量 26
1.13 C++简单类型 27
1.14 const关键字 36
1.15 指针与内存访问 37
1.16 引用变量 41
1.17 const*与*const 42
1.18 复习题 44
第2章 类与对象 46
2.1 struct简介 46
2.2 类定义 47
2.3 成员访问限定符 49
2.4 封装 51
2.5 UML介绍 51
2.6 类的友元 52
2.7 构造函数 53
2.8 析构函数 55
2.9 static关键字 56
2.10 类的声明和定义 59
2.11 复制构造函数与赋值运算符 60
2.12 转换 63
2.13 const成员函数 65
2.14 子对象 66
2.15 练习:类 67
2.16 复习题 74
第3章 Qt简介 78
3.1 风格指南与命名约定 79
3.2 Qt核心模块 80
3.3 Qt Creator,用于Qt编程的集成开发环境 82
3.4 练习:Qt简介 83
3.5 复习题 84
第4章 列表 85
4.1 容器简介 85
4.2 迭代器 85
4.3 关系 90
4.4 练习:关系 91
4.5 复习题 92
第5章 函数 94
5.1 函数重载 94
5.2 可选实参 96
5.3 运算符重载 98
5.4 按值传递参数 101
5.5 按引用传递参数 103
5.6 const引用 105
5.7 函数返回值 106
5.8 从函数返回引用 106
5.9 对const重载 107
5.10 inline函数 109
5.11 带变长实参表的函数 112
5.12 练习:加密 113
5.13 复习题 115
第6章 继承与多态 116
6.1 简单派生 116
6.2 具有多态性的派生 121
6.3 抽象基类的派生 127
6.4 继承设计 130
6.5 重载,隐藏与重写 132
6.6 构造函数,析构函数与复制赋值运算符 133
6.7 处理命令行实参 137
6.8 容器 141
6.9 托管容器,组合与聚合 142
6.10 指针容器 145
6.11 复习题 159
第7章 库与设计模式 163
7.1 建立并复用库 164
7.2 练习:安装库 169
7.3 框架与组件 171
7.4 设计模式 172
7.5 复习题 178
第8章 QObject, QApplication,信号和槽 179
8.1 值和对象 181
8.2 组合模式:父对象和子对象 182
8.3 QApplication和事件循环 187
8.4 Q_OBJECT和moc一览表 188
8.5 信号和槽 189
8.6 QObject的生命周期 190
8.7 QTestLib 191
8.8 练习:QObject, QApplication,信号和槽 194
8.9 复习题 194
第9章 窗件和设计师 195
9.1 窗件的分类 195
9.2 设计师简介 197
9.3 对话框 199
9.4 窗体的布局 201
9.5 图标,图像和资源 202
9.6 窗件的布局 205
9.7 设计师和代码的集成 210
9.8 练习:输入窗体 215
9.9 事件循环:重访 216
9.10 绘制事件和画图 222
9.11 复习题 224
第10章 主窗口和动作 225
10.1 QAction, QMenu和QMenuBar 225
10.2 区域和QDockWidget 232
10.3 QSettings:保存和恢复应用程序的状态 234
10.4 剪贴板和数据传输操作 236
10.5 命令模式 237
10.6 tr()和国际化 243
10.7 练习:主窗口和动作 244
10.8 复习题 244
第11章 范型和容器 246
11.1 范型与模板 246
11.2 范型,算法和运算符 250
11.3 有序映射示例 252
11.4 函数指针和仿函数 255
11.5 享元模式:隐式共享类 257
11.6 练习:范型 260
11.7 复习题 261
第12章 元对象,属性和反射编程 262
12.1 QMetaObject——元对象模式 262
12.2 类型识别和qobject_cast 263
12.3 Q_PROPERTY宏——描述QObject的属性 265
12.4 QVariant类:属性访问 267
12.5 动态属性 270
12.6 元类型,声明和注册 273
12.7 invokeMethod() 275
12.8 练习:反射 275
12.9 复习题 276
第13章 模型和视图 277
13.1 模型-视图-控制器(MVC) 277
13.2 Qt模型和视图 278
13.3 表格模型 287
13.4 树模型 295
13.5 智能指针 298
13.6 练习:模型和视图 300
13.7 复习题 301
第14章 验证和正则表达式 302
14.1 输入掩码 302
14.2 验证器 304
14.3 正则表达式 306
14.4 正则表达式验证 313
14.5 子类化QValidator 314
14.6 练习:验证和正则表达式 316
14.7 复习题 317
第15章 XML解析 318
15.1 Qt XML解析器 320
15.2 SAX解析 321
15.3 XML,树结构和DOM 325
15.4 XML流 332
15.5 复习题 334
第16章 更多的设计模式 335
16.1 创建模式 335
16.2 备忘录模式 342
16.3 Façade模式 347
16.4 复习题 352
第17章 并发 353
17.1 QProcess和进程控制 353
17.2 QThread和QtConcurrent 363
17.3 练习:QThread和QtConcurrent 374
17.4 复习题 375
第18章 数据库编程 376
18.1 QSqlDatabase:从Qt连接SQL 377
18.2 查询和结果集 381
18.3 数据库模型 382
18.4 复习题 383
第二部分 C++语言规范
第19章 类型与表达式 386
19.1 运算符 386
19.2 语句与控制结构 389
19.3 逻辑表达式的求值 394
19.4 枚举 395
19.5 有符号整型类型与无符号整型类型 396
19.6 标准表达式转换 398
19.7 显式转换 400
19.8 用ANSI C++类型转换进行更安全的类型转换 401
19.9 重载特殊的运算符 405
19.10 运行时类型识别 410
19.11 成员选择运算符 412
19.12 练习:类型与表达式 413
19.13 复习题 415
第20章 作用域与存储类 416
20.1 声明与定义 416
20.2 标志符的作用域 417
20.3 存储类 423
20.4 命名空间 426
20.5 复习题 430
第21章 内存访问 431
21.1 指针误用 431
21.2 带有堆内存的更多指针误用 433
21.3 内存访问小结 435
21.4 数组简介 435
21.5 指针的算术运算 436
21.6 数组,函数与返回值 437
21.7 不同类型的数组 439
21.8 有效的指针操作 439
21.9 数组与内存 441
21.10 练习:内存访问 441
21.11 复习题 442
第22章 继承详解 443
22.1 虚指针和虚表 443
22.2 多态与虚析构函数 445
22.3 多重继承 448
22.4 public, protected和private派生 453
22.5 复习题 454
第三部分 编 程 作 业
第23章 MP3自动点唱机作业 456
23.1 Phonon/MultiMediaKit配置 457
23.2 播放列表 457
23.3 多种类型的播放列表 458
23.4 源选择器 459
23.5 各播放列表数据库 460
23.6 星号评分 460
23.7 排序,过滤和播放列表编辑 460
附录A C++的保留关键字 461
附录B 标准头文件 462
附录C 开发工具 463
附录D Alan的Debian程序员快速指南 480
附录E C++/Qt配置 485
参考文献 491
本书是美国萨福克大学已使用十余年的经典教程,利用跨平台开源软件开发框架Qt阐释了C++和设计模式中的主要思想。全书共分四个部分:第一部分介绍C++、UML、Qt、模型-视图、SQL、XML、设计模式等基础知识,目的是为零基础的C++初学者铺垫一条学习面向对象编程的快捷之路;第二部分讲解内存访问、继承等重要的C++特性,是前一部分的延伸和拓展;第三部分使用Phonon编写了一个多媒体播放器,展示了主要技术理念的应用方法;附录部分给出了C++保留关键字、Debian和Qt程序开发环境的配置等内容。每节的练习题和各章后面的复习题,既可作为课堂上的讨论题,也可进一步启发读者对于关键知识点的思考。 【页数】:508【读者对象】本书可作为软件开发人员学习Qt开发技术的参考书,也可作为从事Qt软件开发的研究人员和科技工作者的工具书。【前言】 序 我仍记得我是如何初识C++和Qt的。大约15年前,那时正忙于我的毕业论文,当时,我所做的大部分开发工作都是用FORTRAN和C语言完成的。我工作的Linux系统使用FVWM作为窗口管理器。有一天,我读到了一篇关于KDE的文章,KDE是一个为Linux创建桌面环境的超酷的新开源项目。由于对Linux所提供的用户接口的确不是很满意,我就下载、编译并安装了KDE软件。 KDE使用Qt作为底层框架。在使用一段时间后,我开始向KDE项目贡献代码。尽管大学时已经学习过面向对象编程,但在使用Qt为KDE做开发后才开始真正学会并理解其中的许多概念。 作为一种编程语言,C++在某些方面上还不够完善。大多数的其他语言,如Java、Python或者C#都提供了相对完备的框架集。然而,C++标准库的范围仅局限在底层的功能、容器和算法方面。 强大而复杂的编程语言(例如C++)和使用了C++全部高级特性但范围有限的标准库的结合,对那些打算使用C++进行开发工作的开发人员造成了极大的学习困难。 这就是Qt的用武之地。Qt是一个全面的、高质量的框架,可用于专业级应用程序开发。Qt涵盖了标准库中缺少的大多数功能,比如线程化、Unicode支持、XML处理以及最为重要的——创建图形用户界面(Graphical User Interface,GUI)的方法。 当我用C++写下第一段代码时,用的就是Qt。Qt让我第一个项目的开发工作变得简单了,并且让我在开发真正应用程序过程中学习新的C++概念时变得更为轻松。工作中使用Qt的确很有趣,因此很快我就用Qt和C++把所有使用其他语言的工作都移植了过来。 Qt一直专注于提供一个直观且易用的API集合,这种框架的重心始终是帮助开发人员完成他们的工作。这种关注点又经常会获得某些优雅的设计模式,比如信号/槽机制,这让面向对象编程显得更加方便和直观。 这本书试图将C++和Qt融合在一起进行讲授。利用Qt创建可视化的结果非常容易,通常只需很少的几行代码。这有助于解决作为语言的C++的复杂性,让C++的学习变得更有趣,并可调动学生继续学习的积极性。 一个人要想成为一名优秀作家,就必须先阅读许多好的作品;一个人要想成为一名好的作曲家,就必须先听一些好的音乐。这一点同样适用于软件开发人员。工作中使用由专家们设计出的库,对于成为一名好的软件开发人员至关重要。拥有该库的源代码会有助于开发人员理解许多细节,这也会成为发现灵感甚至或许是找到一些问题解决方案的地方。LGPL①授权的Qt让每个人都可以获得其源代码。 每一名C++学员都应当同时学习Qt,本书致力于同时兼顾这两个重点。Qt用户倾向于对这个框架充满激情,两位作者也不例外。本书利用开发的许多应用程序截图涵盖了更多的Qt技术。 学习应用程序开发从没有像今天这样轻松过。Qt提供了一个包罗万象的、自由的集成开发包,其中提供了一个集成开发环境(Integrated Development Environment,IDE)、一个编译器、一个调试器、一些Qt库和工具,还提供了数以千计的示例程序以及范例文档。 以前,许多软件开发人员新手往往会卡在开发工作中,因为没有合适的指南,或者晦涩编码工作的结果往往不会产生出足够的价值。利用Qt,只需用很少的代码即可创造更多的效益。如果需要将软件迁移到其他平台,比如移动电话、嵌入式硬件、Mac、Windows、Linux桌面以及其他地方,所需的工作只是重新编译。构建Qt的那些人做了所有可能的事情,以让开发人员的生活变得尽可能简单。本书就是为开发人员而准备的指南。 我们希望你有朝一日会成为一名真正的C++开发人员,对KDE有所贡献,或者对某个使用Qt的开源项目有所贡献,并且能够享受这一过程。或许,你也可以像今天数以万计的开发人员所做的那样,靠编写Qt软件为生。机会就在这里——为训练有素的Qt工程师提供的工作岗位每年都在增加中。 本书针对的不仅是那些C++和Qt新手,有经验的软件开发人员也可以从书中许多令人惊叹的新想法中获得价值。由于本书有大量的索引,因而也可以作为一份不错的参考资料。 今天,Qt的开发工作对Qt工程师以及工作于同一个代码库的广大社区人员都是开放的。我们希望有一天你也可以向Qt贡献代码,或者以另一种方式向Qt生态系统添砖加瓦,就像作者在这本书中所完成的工作那样。 Lars Knoll Qt研发团队主管