第Ⅰ部分 C++和Qt 4简介第1章 C++简介 3
1.1 C++概述 4
1.2 C++简史 4
1.3 在开源平台上安装 4
1.3.1 *nix 5
1.3.2 从源代码安装 6
1.4 在Win32平台上安装 8
1.5 第一个C++示例 9
1.6 输入与输出 12
1.7 标识符、类型与常量 15
1.8 C++的基本数据类型 17
1.8.1 main函数与命令行参数 19
1.8.2 代数运算 20
1.9 C++标准库字符串 23
1.10 流 24
1.11 关键字const 27
1.12 指针与内存访问 28
1.12.1 一元运算符&与* 28
1.12.2 运算符new和delete 30
1.13 const*与*const 32
1.14 引用变量 34
第2章 类 37
2.1 结构 38
2.2 类定义 39
2.3 成员访问限定符 40
2.4 封装 42
2.5 UML简介 43
2.6 类的友元 44
2.7 构造函数 44
2.8 子对象 46
2.9 析构函数 47
2.10 关键字static 48
2.11 复制构造函数与赋值运算符 51
2.12 转换 53
2.13 const成员函数 55
第3章 Qt简介 65
3.1 示例工程:使用Qapplication与QLabel 66
3.2 Makefile、qmake以及工程文件 67
3.2.1 #include:搜索头文件 69
3.2.2 make命令 70
3.2.3 清除文件 71
3.3 获得在线帮助 72
3.4 风格指南与命名约定 73
3.5 Qt核心模块 74
3.6 流与日期 74
第4章 列表 77
4.1 容器简介 78
4.2 迭代器 78
4.3 关系 80
第5章 函数 85
5.1 函数声明 86
5.2 重载函数 86
5.3 可选参数 89
5.4 运算符重载 91
5.5 通过值传递参数 94
5.6 通过引用传递参数 96
5.7 const引用 99
5.8 函数返回值 100
5.9 从函数中返回引用 100
5.10 根据const属性进行重载 101
5.11 内联函数 103
5.12 内联还是宏扩展 104
第6章 继承与多态 109
6.1 简单派生 110
6.2 多态派生 116
6.3 从抽象基类中派生 121
6.4 继承设计 124
6.5 重载、隐藏与覆盖 126
6.6 构造函数、析构函数与拷贝赋值运算符 127
6.7 处理命令行参数 129
第Ⅱ部分 高级编程第7章 库 139
7.1 代码容器 140
7.2 重用其他库 141
7.3 组织库:依赖管理 142
7.4 安装库:实验室练习 145
7.5 框架与组件 146
第8章 设计模式简介 149
8.1 目录与文件:QDir与QFileInfo 150
8.2 Visitor模式 151
8.3 使用继承来定制Visitor 153
第9章 QObject 159
9.1 QObject的子对象管理 161
9.2 组合模式:父对象与子对象 163
9.3 QApplication与事件循环 166
9.3.1 布局:初观 168
9.3.2 连接到槽 169
9.3.3 信号与槽 170
9.4 Q_OBJECT与moc:一览表 174
9.5 值与对象 175
9.6 tr()与国际化 176
第10章 范型与容器 179
10.1 范型与模板 180
10.1.1 函数模板 180
10.1.2 类模板 181
10.2 容器 184
10.3 管理容器、组合与聚合 185
10.4 隐式共享类 188
10.5 范型、算法和运算符 189
10.6 serializer模式 191
10.7 分类映射示例 193
第11章 Qt GUI部件 199
11.1 部件分类 200
11.2 QMainWindow和QSettings 201
11.3 对话框 204
11.4 图像与资源 208
11.5 部件的布局 211
11.5.1 Spacing、Stretching和Struts 214
11.5.2 在布局之间移动部件 215
11.6 QActions、QMenus和QMenuBars 219
11.7 QActions、QToolbars和QActionGroups 221
11.8 区域与QDockWidgets 228
11.9 QStringList的视图 229
第12章 并行 233
12.1 QProcess与进程控制 234
12.1.1 进程与环境 236
12.1.2 Qonsole:在Qt中编写一个Xterm 239
12.1.3 带有键盘事件的Qonsole 241
12.2 线程与QThread 244
12.2.1 QPixmap和Qthread直观演示例子:电影播放器 245
12.2.2 带有QTimer的电影播放器 248
12.2.3 多线程、队列和Loggers的例子:Giant 250
12.2.4 线程安全与QObjects 256
12.3 总结:QProcess和QThread 257
第13章 验证与正则表达式 259
13.1 验证器 260
13.2 正则表达式 261
13.2.1 正则表达式语法 262
13.2.2 正则表达式:电话号码识别 264
13.3 正则表达式验证 267
第14章 解析XML 271
14.1 Qt XML模块 274
14.2 事件驱动解析 275
14.3 XML、树型结构和DOM 278
14.3.1 Visitor模式:DOM树遍历 280
14.3.2 使用DOM生成XML 283
第15章 元对象、性质和反射编程 289
15.1 反模式 290
15.2 QMetaObject:MetaObject模式 291
15.3 类型识别与qobject_cast 292
15.4 Q_PROPERTY宏:描述QObject性质 294
15.5 QVariant类:访问性质 297
15.6 DataObject:QObject的一个扩展 299
15.7 性质容器:PropsMap 301
第16章 更多设计模式 303
16.1 创建型模式 304
16.1.1 抽象工厂 305
16.1.2 抽象工厂和库 306
16.1.3 qApp和Singleton模式 308
16.1.4 创建规则和友元函数(友元函数的真正用处) 309
16.1.5 使用工厂的好处 312
16.2 Serializer模式回顾 315
16.2.1 导出到XML 317
16.2.2 通过抽象工厂导入对象 318
16.3 Facade模式 322
16.3.1 实用Facade 325
16.3.2 智能指针:auto_ptr 325
16.3.3 FileTagger:Facade示例 326
第17章 模型与视图 331
17.1 M-V-C:控制器 332
17.2 动态表单模型 333
17.2.1 表单模型 336
17.2.2 表单视图 338
17.2.3 未预见的类型 340
17.2.4 控制Actions 341
17.2.5 DateObject表单模型 343
17.3 Qt 4模型和视图 347
17.4 表模型 348
17.5 树模型 354
第18章 Qt SQL类 359
18.1 MySQL简介 360
18.2 查询与结果集合 363
18.3 数据库模型 364
第Ⅲ部分 C++语言参考第19章 类型与表达式 369
19.1 运算符 370
19.2 逻辑表达式的估值 373
19.3 枚举 373
19.4 有符号与无符号整数类型 375
19.5 标准表达式转换 377
19.6 显式类型转换 378
19.7 使用ANSI C++类型转换进行安全类型转换 379
19.7.1 static_cast与const_cast 379
19.7.2 reinterpret_cast 382
19.7.3 不使用C语言风格的类型转换的原因 383
19.8 运行时类型识别(RTTI) 383
19.9 成员选择运算符 385
第20章 作用域类与存储类 391
20.1 声明与定义 392
20.2 标识符作用域 393
20.2.1 标识符的默认作用域小结 394
20.2.2 文件作用域与块作用域及操作符∷ 395
20.3 存储类 397
20.4 名字空间 400
20.4.1 匿名名字空间 402
20.4.2 开放的名字空间 402
20.4.3 名字空间、静态对象与extern 403
第21章 语句与控制结构 405
21.1 语句 406
21.2 选择语句 406
21.3 循环 409
21.4 异常 411
21.4.1 异常处理 411
21.4.2 异常类型 411
21.4.3 抛出事件 412
21.4.4 try与catch 415
21.4.5 再谈throw 419
21.4.6 重新抛出的异常 420
21.4.7 异常表达式 422
第22章 内存访问 427
22.1 指针的“病理学” 428
22.2 与堆内存有关的指针“病理学”进阶 430
22.3 内存访问概要 432
22.4 数组 432
22.5 指针算术操作 433
22.6 数组、函数和返回值 434
22.7 几种不同的数组 436
22.8 有效指针操作 436
22.9 new操作失败的处理方法 438
22.9.1 set_new_handler():解决new失败的另一种方法 439
22.9.2 使用set_new_handler和bad_alloc 440
22.9.3 检测null:测试new失败的更新方法 441
22.10 本章小结 442
第23章 继承详述 445
23.1 虚函数表指针和虚函数表 446
23.2 多态和虚析构函数 448
23.3 多重继承 450
23.3.1 多重继承的语法 450
23.3.2 带抽象接口的多重继承 452
23.3.3 解决多重继承冲突 453
23.4 public、protected和private派生 456
第24章 其他相关话题 459
24.1 带有变长参数列表的函数 460
24.2 资源共享 461
第Ⅳ部分 编程作业第25章 MP3点唱机作业 467
25.1 数据模型:Mp3File 469
25.2 Visitor:生成播放列表 470
25.3 Preference:一个枚举类型 471
25.4 重用id3lib 473
25.5 PlayListModel序列化 475
25.6 测试Mp3File相关类 475
25.7 简单查询和过滤器 476
25.8 Mp3PlayerView 478
25.9 模型和视图:PlayList 479
25.10 源选择器 479
25.11 持久设置 481
25.12 给FileTagger编辑表格视图 481
25.13 数据库视图 482
第Ⅴ部分 附录 487
附录A C++保留的关键字 487
附录B 标准头文件 489
附录C 开发环境 491
C.1 用于#including文件的预处理器 491
C.2 链接器 493
C.3 调试 496
C.3.1 建立一个可调试的目标 497
C.3.2 gdb快速入门 497
C.3.3 查找内在错误 499
C.4 Qt助手和设计器 501
C.5 开源IDE和开发工具 502
C.5.1 UML建模工具 504
C.5.2 jEdit 504
参考文献 507