简介
书籍
计算机书籍
《Qt中的C++技术》剖析了开源开发框架Qt中的C++技术,给读者提供一个优秀的案例,以学习C++语言以及面向对象设计技术。该书讨论了以下内容:类模板特化技术;分析比较了C++标准库、Qt对字符串、数据输入/输出的处理思路;隐式共享与d-pointer技术;函子及其在QTL(Qt Template Library)中的应用,QTL是如何使用模板特化技术优化QList性能的;如何在C++程序中嵌入汇编代码,实现一个原子操作,以很小的开销实现线程间通信;信号与槽机制;Graphics/View框架等。
软件学院或者计算机学院的学生,可将《Qt中的C++技术》作为课程“C++程序设计”或者“面向对象软件设计”的参考书;上述课程的教师,可将《Qt中的C++技术》的内容融入他们的主讲或者试验环节,作为相关实训课程的教材;软件行业的开发者,可将《Qt中的C++技术》作为深入学习C++设计与编程技术的案例教材。
目录
《qt中的c++技术》
第1章 案例的选择与评估 1
1.1 案例的初步选择 1
1.2 案例的定量评估 3
1.3 其他案例 5
1.4 基本约定 6
1.5 关于类图的约定 8
第2章 qt概述 11
2.1 qt版权 13
2.2 qt库的编译 14
2.3 开发环境的设置 16
2.4 主控台的输入与输出 18
2.5 qt风格的编程规范 19
2.6 与qt及c++相关的文献资源 21
第3章 类模板特化 24
3.1 类模板特化 24
3.2 traits技术 27
3.3 类型分类(type classification)技术 28
3.4 降低代码膨胀 30
第4章 标准库及qt对字符串的处理 32
.4.1 字符及其编码 32
4.2 标准库的类模板basic_string 34
4.3 qt的类qstring 37
第5章 国际化与区域文化 41
5.1 区域文化 41
5.2 facet 44
5.3 类locale的实现 50
5.4 类模板facet的实现 52
5.5 派生新的facet类 53
第6章 c++的iostream 56
6.1 c语言的scanf/printf函数组 56
6.2 iostream的总体结构 57
6.3 字符特征的描述 61
6.4 模板特化后的总体结构 64
6.5 文件流 65
6.6 字符串流 71
6.7 流缓冲区 73
6.8 二进制文件的处理 76
6.9 用户自定义类型的输入和输出 77
第7章 qt的流 79
7.1 文件系统及底层文件操作 80
7.2 类qtextstream 81
7.3 类qdatastream 83
7.4 类qlocale 86
7.5 iostream和qt流类的比较 87
第8章 隐式共享与d-pointer技术 88
8.1 隐式共享 88
8.2 d-pointer在隐式共享中的应用 90
8.3 二进制代码兼容 92
8.4 d-pointer模式的实现 96
8.5 qobject中的d-pointer 98
第9章 qt容器与迭代器 101
9.1 qtl概述 101
9.2 qtl容器和qdatastream的无缝连接 107
9.3 类型分类技术在qlist中的应用 109
9.4 函子的应用——相关词词典 112
第10章 多线程与可重入 115
10.1 创建一个线程 116
10.2 线程间同步 116
10.3 线程安全与可重入 121
10.4 多线程环境下的singleton模式 122
第11章 信号与槽(signals and slots) 134
11.1 对象树(qobject tree) 134
11.2 信号与槽机制 135
11.3 信号与槽的应用例子 140
第12章 graphics/view框架 145
12.1 qt图形系统介绍 145
12.2 graphics/view框架 146
12.3 例子——相撞的老鼠 147
第13章 model/view框架 152
13.1 model/view框架总体架构 154
13.2 模型(models) 157
13.3 视图(views) 179
13.4 选择操作 180
13.5 委托(delegates) 185
13.6 代理模型(proxy models) 188
13.7 便利视图类 199
第14章 qt中的命令模式 206
14.1 qt的undo framework 206
14.2 使用undo framework的一个例子 211
第15章 qt中的抽象工厂模式 215
15.1 抽象工厂模式简介 215
15.2 qtextcodec及其子类的定义 217
15.3 界面风格 220
第16章 qt中的观察者模式 235
16.1 事件处理机制 236
16.2 事件滤波器 237
16.3 一个简单的例子——图像浏览器 239
16.4 一个有趣的例子——鼠标手势 240
第17章 qt的元对象系统 252
17.1 c++ rtti (run-time type information) 252
17.2 qt的元对象系统 258
第18章 智能指针 263
18.1 qpointer 263
18.2 qshareddatapointer 275
参考文献 282
索引 284
代码目录
第1章 案例的选择与评估 1
第2章 qt概述 11
代码段2 1,使用qt进行主控台输入与输出,取自z:\examples\qt_console\main.cpp 19
第3章 类模板特化 24
代码段3 1,类模板stack,引自z:\examples\template_specialization 24
代码段3 2,完全特化的类模板stack,引自examples\template_specialization 25
代码段3 3,部分特化的类模板stack,引自examples\template_specialization 25
代码段3 4,使用traits技术封装float及double类型的特征,取自z:\examples\float_traits\main.cpp 27
代码段3 5,类型分类技术,取自z:\examples\type_classification\main.cpp 29
代码段3 6,应用类模板特化降低代码膨胀,摘自examples\reduce_code_bloat 30
代码段3 7,应用类模板特化降低代码膨胀,摘自z:\examples\reduce_code_bloat 31
第4章 标准库及qt对字符串的处理 32
代码段4 1,类模板basic_string的构造函数 35
代码段4 2,类模板basic_string常用构造函数的使用,取自z:\examples\basic_string_demo\main.cpp 36
代码段4 3,basic_string对象和字符串的比较 36
代码段4 4,字符串的不同存放方式,摘自z:\examples\qstring_demo\main.cpp 39
代码段4 5,qstring的字符编码转换功能,摘自z:\examples\qstring_merit\main.cpp 40
第5章 国际化与区域文化 41
代码段5 1,类模板time_get的使用方法,取自z:\examples\locale_time_get\main.cpp 47
代码段5 2,类模板time_put的成员函数put的用法,取自z:\examples\locale_time_
put\main.cpp 48
代码段5 3,类模板codecvt的成员函数in的功能,取自z:\examples\locale_codecvt\
main.cpp 50
代码段5 4,类locale以及facet的实现框架,取自vs 2010安装目录crt\src\xlocale 51
代码段5 5,类locale::id的作用 53
代码段5 6,创建新的facet子类,取自z:\examples\locale_unit\main.cpp 54
第6章 c++的iostream 56
代码段6 1,应用类模板char_traits实现大小写不敏感的字符串类ci_string,取自z:\examples\ci_string\ci_string\main.cpp 63
代码段6 2,对文件流进行读取以及写入操作,取自z:\examples\
fstream_demo\main.cpp 68
代码段6 3,具有多种格式设置的流,取自z:\examples\share_streambuf 74
代码段6 4,流缓冲区的复制,z:\examples\copy_streambuf\main.cpp 75
代码段6 5,二进制文件的读取,摘自z:\examples\process_binary\main.cpp 77
代码段6 6,直接操作二进制文件对应的流缓冲区,摘自z:\examples\
process_binary\main.cpp 77
代码段6 7,用户自定义类型的输入和输出,摘自z:\examples\
overloaded_io\main.cpp 78
第7章 qt的流 79
代码段7 1,使用qfileinfo以及qdir获取各驱动器下的子目录名,取自z:\examples\qdir_demo\main.cpp 81
代码段7 2,使用qfile操作一个文件,取自z:\examples\qfile_read\main.cpp 81
代码段7 3,使用qtextcodec转换编码方案,摘自z:\examples\
qtextstream_demo\main.cpp 82
代码段7 4,使用qdatastream输出二进制数据,摘自z:\examples\
qdatastream_usage\main.cpp 84
代码段7 5,使用qdatastream读取二进制数据,摘自z:\examples\
qdatastream_usage\main.cpp 84
代码段7 6,重载运算符以使qdatastream支持新的数据类型,取自z:\examples\qdatastream_demo\main.cpp 85
代码段7 7,qlocale的使用,摘自z:\examples\qlocale_set\main.cpp 86
第8章 隐式共享与d-pointer技术 88
代码段8 1,采用隐式共享技术的qstring::tocasefolded( ),取自src\
corelib\tools\qstring.cpp 89
代码段8 2,qstring的复制构造函数,摘自src\corelib\tools\qstring.h 90
代码段8 3,类matrix的传统定义方式,摘自z:\examples\d_pointer\matrix\main.cpp 90
代码段8 4,应用d-pointer模式的类matrix,摘自z:\examples\d_pointer\matrix_with_d_pointer\main.cpp 91
代码段8 5,qt 4.5版本中类qlocale的定义,摘自s:\corelib\tools\qlocale.h 93
代码段8 6,qt 4.5版本中类qlocaleprivate的定义,摘自
s:\corelib\tools\qlocale_p.h 93
代码段8 7,修改成员函数tostring()加入qt库的版本信息,摘自
s:\corelib\tools\qlocale.cpp 94
代码段8 8,使用类qlocale的qt应用程序,摘自z:\examples\d_
pointer\test_qlocale\main.cpp 95
代码段8 9,实现d-pointer模式的一个例子 96
代码段8 10,qt中与d-pointer模式相关的宏,摘自src\corelib\global\qglobal.h 97
代码段8 11,宏q_declare_private展开后的结果 97
代码段8 12,qobject及qobjectdata的定义,摘自s:\corelib\kernel\qobject.h 98
代码段8 13,类qobject及qobjectprivate对d-pointer的使用 99
代码段8 14,qwidget继承了qobject的d-pointer模式 99
第9章 qt容器与迭代器 101
代码段9 1,stl风格以及java风格的迭代器,摘自z:\examples\
qlist_change_value\main.cpp 103
代码段9 2,foreach的使用格式,取自z:\examples\foreach_demo\main.cpp 104
代码段9 3,类模板qless,摘自src\corelib\tools\qalgorithms.h 106
代码段9 4,使用qdatastream保存/读取qmap对象,摘自
z:\examples\english_pron\main.cpp 109
代码段9 5,qlistdata的成员函数remove(),摘自src\corelib\tools\qlistdata.cpp 110
代码段9 6,qtypeinfo的定义,摘自src\corelib\global\qglobal.h 110
代码段9 7,qlist的数据结构,摘自src\corelib\tools\qlist.h 111
代码段9 8,向qlist中添加元素,摘自src\corelib\tools\qlist.h 111
代码段9 9,使用qsort对容器排序,摘自z:\examples\qtl_related_words\main.cpp 113
代码段9 10,函子indirectcompare,摘自z:\examples\qtl_thesaurus\main.cpp 113
第10章 多线程与可重入 115
代码段10 1,在qt中创建多线程,摘自z:\examples\simple_thread\main.cpp 116
代码段10 2,互斥体qmutex的使用,取自z:\examples\qmutex\main.cpp 117
代码段10 3,使用互斥体的一个简单方法 118
代码段10 4,用信号量来管理循环缓冲区,摘自z:\examples\qsemaphore\main.cpp 119
代码段10 5,使用条件量管理循环缓冲区,摘自z:\examples\qwaitcondition\main.cpp 120
代码段10 6,以传统方式实现singleton模式 122
代码段10 7,在堆中创建全局对象 123
代码段10 8,简化的成员函数instance() 124
代码段10 9,通过静态局部对象来定义singleton对象 124
代码段10 10,静态局部对象的初始化 125
代码段10 11,c++的判断/赋值操作无法锁定共享资源 125
代码段10 12,qbasicatomicpointer 的定义,摘自s:\corelib\thread\qbasicatomic.h 126
代码段10 13,qbasicatomicpointer 在windows/intel平台上的实现,摘自s:\corelib\arch\qatomic_windows.h 126
代码段10 14,类模板qglobalstatic的定义,摘自s:\corelib\global\qglobal.h 129
代码段10 15,类模板qglobalstaticdeleter的定义,摘自s:\corelib\global\qglobal.h 129
代码段10 16,宏q_global_static的定义,摘自s:\corelib\global\qglobal.h 130
代码段10 17,单线程环境下宏q_global_static的定义,取自
s:\corelib\global\qglobal.h 131
代码段10 18,直接返回一个指向singleton对象的指针 132
代码段10 19,使用一个已经析构的singleton对象,摘自z:\examples\use_destructed_singleton\main.cpp 132
第11章 信号与槽(signals and slots) 134
代码段11 1,qobject对象的定义顺序,摘自z:\examples\
qobject_destruction_order\main.cpp 135
代码段11 2,信号与槽的定义,摘自z:\examples\signals_slots_
demo\signals_slots_declare.h 137
代码段11 3,信号与槽的绑定,摘自z:\examples\signals_slots_demo\main.cpp 137
代码段11 4,类finddialog的定义,摘自
z:\examples\find_dialog\find_dialog.h 140
代码段11 5,类finddialog的构造函数,取自
z:\examples\find_dialog\find_dialog.cpp 141
代码段11 6,类finddialog的构造函数(续),摘自
z:\examples\find_dialog\find_dialog.cpp 142
代码段11 7,类finddialog的槽函数及析构函数,摘自
z:\examples\find_dialog\find_dialog.cpp 143
第12章 graphics/view框架 145
代码段12 1,类mouse的定义,取自z:\examples\collidingmice\mouse.h 147
代码段12 2,类mouse的部分成员函数,取自z:\examples\collidingmice\mouse.cpp 148
代码段12 3,类mouse的成员函数advance(),取自
z:\examples\collidingmice\mouse.cpp 149
代码段12 4,项目collidingmice的主函数,取自
z:\examples\collidingmice\main.cpp 150
第13章 model/view框架 152
代码段13 1,类treemodel的声明,取自z:\examples\mvc\binary_tree\treemodel.h 166
代码段13 2,类treemodel的实现,取自z:\examples\mvc\binary_tree\treemodel.cpp 166
代码段13 3,类treemodel的实现(续),取自
z:\examples\mvc\binary_tree\treemodel.cpp 167
代码段13 4,满二叉树例子的主函数,取自z:\examples\mvc\binary_tree\main.cpp 168
代码段13 5,能够处理更多角色的模型类,取自
z:\examples\mvc\binary_tree_more_role\treemodel.cpp 169
代码段13 6,显示自身发生变化的数据项,取自
z:\examples\mvc\binary_tree_changing_data\treemodel.cpp 170
代码段13 7,更改数据集的标头,取自z:\examples\mvc\
binary_tree_header\treemodel.cpp 172
代码段13 8,编辑满二叉树的叶节点,取自z:\examples\mvc\binary_
tree_editable\treemodel.cpp 173
代码段13 9,重载qabstractlistmodel的虚函数以显示、编辑一个列表,取自z:\examples\mvc\qabstractlistmodel_demo\listmodel.cpp 174
代码段13 10,使用qstandarditemmodel处理列表,取自z:\examples\mvc\qstandarditemmodel_demo\main.cpp 176
代码段13 11,使用qstandarditemmodel处理表格,取自z:\examples\mvc\qstandarditemmodel_demo\main.cpp 176
代码段13 12,使用qstandarditemmodel处理树,取自z:\examples\mvc\qstandarditemmodel_demo\main.cpp 177
代码段13 13,类qstringlistmodel的使用,取自z:\examples\mvc\qstringlistmodel_demo\main.cpp 178
代码段13 14,便利模型类qfilesystemmodel的用法,取自z:\examples\mvc\file_system\main.cpp 179
代码段13 15,用qcolumnview对象显示本地文件系统,取自z:\examples\mvc\qcolumnview_demo\main.cpp 180
代码段13 16,类mainwindow的声明,取自z:\examples\mvc\selection_monitoring\mainwindow.h 183
代码段13 17,类mainwindow实现,取自z:\examples\mvc\selection_monitoring\mainwindow.cpp 183
代码段13 18,同步两个视图对象中的选择信息,取自z:\examples\mvc\sync_selection\main.cpp。 185
代码段13 19,例子spinbox的主函数,取自z:\examples\mvc\
spinboxdelegate\main.cpp 187
代码段13 20,类spinboxdelegate的实现,取自z:\examples\mvc\
spinboxdelegate\delegate.cpp 187
代码段13 21,代理模型索引的创建,取自z:\examples\mvc\revertproxymodel\revertproxymodel.cpp 192
代码段13 22,代理模型revertproxymodel的其他2个接口函数,取自z:\examples\mvc\revertproxymodel\revertproxymodel.h 193
代码段13 23,代理模型revertproxymodel的接口函数parent(),取自z:\examples\mvc\revertproxymodel\revertproxymodel.cpp 194
代码段13 24,接口函数data( )的实现,取自q:\src\gui\itemviews\
qabstractproxymodel.cpp 194
代码段13 25,创建源模型,取自z:\examples\mvc\basicsortfiltermodel\main.cpp 197
代码段13 26,类window的构造函数,取自z:\examples\mvc\
basicsortfiltermodel\window.cpp 197
代码段13 27,令代理模型指向源模型,取自z:\examples\mvc\
basicsortfiltermodel\window.cpp 198
代码段13 28,代理模型对源模型数据项的过滤、排序,取自z:\examples\mvc\basicsortfiltermodel\window.cpp 198
代码段13 29,向qlistwidget中添加数据项,取自z:\examples\mvc\qlistwidget_demo\main.cpp 200
代码段13 30,新闻的表示,z:\examples\mvc\item_roles\newsdialog.cpp 200
代码段13 31,设置qlistwidgetitem所表示数据项中的数据子项,取自z:\examples\mvc\item_roles\newsdialog.cpp 201
代码段13 32,gdp数据的表示,取自z:\examples\mvc\
qtablewidget_demo\main.cpp 202
代码段13 33,类qtablewidget的使用,取自z:\examples\mvc\
qtablewidget_demo\main.cpp 203
代码段13 34,书籍目录的表示,取自z:\examples\mvc\
qtreewidget_demo\main.cpp 204
代码段13 35,构建qtreewidget中的树状模型,取自z:\examples\mvc\qtreewidget_demo\main.cpp 205
第14章 qt中的命令模式 206
代码段14 1,qundocommand的部分定义 208
代码段14 2,类qundocommand部分成员函数的实现,摘自
s:\gui\util\qundostack.cpp 209
代码段14 3,qundostack基本功能部分的定义,取自s:\gui\util\qundostack.h 210
代码段14 4,qundostackprivate的部分定义,取自s:\gui\util\qundostack_p.h 211
代码段14 5,类movecommand的定义,取自
z:\examples\undoframework\commands.h 212
代码段14 6,类movecommand的实现,取自
z:\examples\undoframework\commands.cpp 213
第15章 qt中的抽象工厂模式 215
代码段15 1,依据全局变量创建不同风格的界面元素 216
代码段15 2,抽象工厂模式的使用 217
代码段15 3,latin1到unicode的转换,取自z:\examples\factory_pattern\main.cpp 217
代码段15 4,类qtextcodec的部分定义,取自s:\corelib\codecs\qtextcodec.h 218
代码段15 5,qtextcodec部分成员函数的实现,取自
s:\corelib\codecs\qtextcodec.cpp 219
代码段15 6,类qlatin1codec的定义与实现 219
代码段15 7,类widgetgallery的成员函数changestyle(),取自z:\examples\styles\widgetgallery.cpp 223
代码段15 8,圆角矩形绘制路径的绘制,取自z:\examples\
styles\norwegianwoodstyle.cpp 225
代码段15 9,基本元素的绘制,取自z:\examples\styles\norwegianwoodstyle.cpp 226
代码段15 10,基本元素的绘制(续),取自z:\examples\styles\
norwegianwoodstyle.cpp 228
代码段15 11,norwegianwoodstyle的成员函数drawcontrol,取自z:\examples\styles\norwegianwoodstyle.cpp 229
代码段15 12,更改控件属性的成员函数polish,取自z:\examples\
styles\norwegianwoodstyle.cpp 231
代码段15 13,更改控件尺寸的成员函数pixelmetric,取自z:\examples\styles\norwegianwoodstyle.cpp 231
代码段15 14,设置与风格相关的一些属性,取自z:\examples\
styles\norwegianwoodstyle.cpp 232
代码段15 15,更改应用程序调色板的成员函数polish,取自z:\examples\styles\norwegianwoodstyle.cpp 232
代码段15 16,设置填充图像的私有成员函数settexture,取自z:\examples\styles\norwegianwoodstyle.cpp 233
第16章 qt中的观察者模式 235
代码段16 1,设置qscrollarea为另一控件的观察者,取自
q:\src\gui\widgets\qscrollarea.cpp 238
代码段16 2,将一个qscrollarea对象设置为一个qlabel对象的观察者,取自
z:\examples\imageviewer\imageviewer.cpp 239
代码段16 3,类imageviewer中更改图像显示比例的函数,取自
z:\examples\imageviewer\imageviewer.cpp 240
代码段16 4,鼠标手势及其回调函数的定义,取自
z:\examples\mouse_guesture\mousegesturerecognizer.h 244
代码段16 5,类mousegesturerecognizer的定义,取自
z:\examples\mouse_guesture\mousegesturerecognizer.h 245
代码段16 6,对鼠标轨迹进行识别的核心算法,取自
z:\examples\mouse_guesture\mousegesturerecognizer.cpp 246
代码段16 7,类mousegesture的定义,取自z:\examples\mouse_
guesture\mousegesture.h 247
代码段16 8,类gesturecallbacktosignal 的定义,取自
z:\examples\mouse_guesture\mousegesturefilter.cpp 247
代码段16 9,类mousegesturefilter的定义 248
代码段16 10,鼠标手势的添加与删除,取自z:\examples\mouse_guesture\mousegesturefilter.cpp 249
代码段16 11,事件滤波器及相关函数,取自z:\examples\mouse_guesture\mousegesturefilter.cpp 249
代码段16 12,类mainwindow的定义,取自z:\examples\mouse_
guesture\mainwindow.h 250
代码段16 13,鼠标手势例子的主函数,取自z:\examples\mouse_guesture\main.cpp 251
第17章 qt的元对象系统 252
代码段17 1,类type_info的声明 254
代码段17 2,typeid的操作数可以为基本类型、非多态类及多态类,取自z:\examples\typeid\main.cpp 255
代码段17 3,判断一个qobject派生类的对象是否“具有”某个类型,取自z:\examples\qmetaobject_demo\main.cpp 260
代码段17 4,获取qobject派生类对象的类型信息,取自z:\examples\qmetaobject_demo1\main.cpp 260
代码段17 5,获取qobject派生类对象的数据,取自z:\examples\introspect_
qobject\main.cpp 261
代码段17 6,qvariant的使用,取自z:\examples\qvariant\main.cpp 262
代码段17 7,qvariant支持二进制输入/输出,摘自z:\examples\qvariant\main.cpp 262
第18章 智能指针 263
代码段18 1,qpointer的功能,取自z:\examples\qpointer_demo\main.cpp 264
代码段18 2,对一个对象施加delete运算符,取自z:\examples\delete_
object\main.cpp 264
代码段18 3,具有淡入显示效果的类faderwidget 266
代码段18 4,使用qpointer来判断一个qfaderwidget控件是否存在 267
代码段18 5,qwidget对qpointer的使用,取自s:\gui\kernel\qwidget.cpp 269
代码段18 6,遍历qmultihash中具有相同关键字的元素,取自z:\examples\qmultihash_demo\main.cpp 271
代码段18 7,使用信号量qreadwritelock锁定某个资源以进行写入操作 271
代码段18 8,使用信号量qwritelock锁定某个资源以进行写入操作 272
代码段18 9,与qpointer相关的类型与函数,取自s:\corelib\kernel\qobject.cpp 273
代码段18 10,qpointer的定义,摘自s:\corelib\kernel\qpointer.h 273
代码段18 11,qmetaobject中的相关代码,取自s:\corelib\kernel\qobject.cpp 274
代码段18 12,qobject析构函数中与qpointer相关的代码,摘自
s:\corelib\kernel\qobject.cpp 275
代码段18 13,使用类模板qshareddatapointer 实现隐式共享,取自z:\examples\qsharedatapointer_demo\main.cpp 276
代码段18 14,关于常量型成员函数的约定,取自z:\examples\select_
const\main.cpp 278
代码段18 15,类qshareddata 的定义,取自q:\src\corelib\tools\qshareddata.h 279
代码段18 16,类模板qshareddatapointer的定义(待续),取自
q:\src\corelib\tools\qshareddata.h 279
代码段18 17,类模板qshareddatapointer的定义(待续),取自
q:\src\corelib\tools\qshareddata.h 280
代码段18 18,类模板qshareddatapointer的定义(续),取自
q:\src\corelib\tools\qshareddata.h 280
参考文献 282
索引 284
第1章 案例的选择与评估 1
1.1 案例的初步选择 1
1.2 案例的定量评估 3
1.3 其他案例 5
1.4 基本约定 6
1.5 关于类图的约定 8
第2章 qt概述 11
2.1 qt版权 13
2.2 qt库的编译 14
2.3 开发环境的设置 16
2.4 主控台的输入与输出 18
2.5 qt风格的编程规范 19
2.6 与qt及c++相关的文献资源 21
第3章 类模板特化 24
3.1 类模板特化 24
3.2 traits技术 27
3.3 类型分类(type classification)技术 28
3.4 降低代码膨胀 30
第4章 标准库及qt对字符串的处理 32
.4.1 字符及其编码 32
4.2 标准库的类模板basic_string 34
4.3 qt的类qstring 37
第5章 国际化与区域文化 41
5.1 区域文化 41
5.2 facet 44
5.3 类locale的实现 50
5.4 类模板facet的实现 52
5.5 派生新的facet类 53
第6章 c++的iostream 56
6.1 c语言的scanf/printf函数组 56
6.2 iostream的总体结构 57
6.3 字符特征的描述 61
6.4 模板特化后的总体结构 64
6.5 文件流 65
6.6 字符串流 71
6.7 流缓冲区 73
6.8 二进制文件的处理 76
6.9 用户自定义类型的输入和输出 77
第7章 qt的流 79
7.1 文件系统及底层文件操作 80
7.2 类qtextstream 81
7.3 类qdatastream 83
7.4 类qlocale 86
7.5 iostream和qt流类的比较 87
第8章 隐式共享与d-pointer技术 88
8.1 隐式共享 88
8.2 d-pointer在隐式共享中的应用 90
8.3 二进制代码兼容 92
8.4 d-pointer模式的实现 96
8.5 qobject中的d-pointer 98
第9章 qt容器与迭代器 101
9.1 qtl概述 101
9.2 qtl容器和qdatastream的无缝连接 107
9.3 类型分类技术在qlist中的应用 109
9.4 函子的应用——相关词词典 112
第10章 多线程与可重入 115
10.1 创建一个线程 116
10.2 线程间同步 116
10.3 线程安全与可重入 121
10.4 多线程环境下的singleton模式 122
第11章 信号与槽(signals and slots) 134
11.1 对象树(qobject tree) 134
11.2 信号与槽机制 135
11.3 信号与槽的应用例子 140
第12章 graphics/view框架 145
12.1 qt图形系统介绍 145
12.2 graphics/view框架 146
12.3 例子——相撞的老鼠 147
第13章 model/view框架 152
13.1 model/view框架总体架构 154
13.2 模型(models) 157
13.3 视图(views) 179
13.4 选择操作 180
13.5 委托(delegates) 185
13.6 代理模型(proxy models) 188
13.7 便利视图类 199
第14章 qt中的命令模式 206
14.1 qt的undo framework 206
14.2 使用undo framework的一个例子 211
第15章 qt中的抽象工厂模式 215
15.1 抽象工厂模式简介 215
15.2 qtextcodec及其子类的定义 217
15.3 界面风格 220
第16章 qt中的观察者模式 235
16.1 事件处理机制 236
16.2 事件滤波器 237
16.3 一个简单的例子——图像浏览器 239
16.4 一个有趣的例子——鼠标手势 240
第17章 qt的元对象系统 252
17.1 c++ rtti (run-time type information) 252
17.2 qt的元对象系统 258
第18章 智能指针 263
18.1 qpointer 263
18.2 qshareddatapointer 275
参考文献 282
索引 284
代码目录
第1章 案例的选择与评估 1
第2章 qt概述 11
代码段2 1,使用qt进行主控台输入与输出,取自z:\examples\qt_console\main.cpp 19
第3章 类模板特化 24
代码段3 1,类模板stack,引自z:\examples\template_specialization 24
代码段3 2,完全特化的类模板stack,引自examples\template_specialization 25
代码段3 3,部分特化的类模板stack,引自examples\template_specialization 25
代码段3 4,使用traits技术封装float及double类型的特征,取自z:\examples\float_traits\main.cpp 27
代码段3 5,类型分类技术,取自z:\examples\type_classification\main.cpp 29
代码段3 6,应用类模板特化降低代码膨胀,摘自examples\reduce_code_bloat 30
代码段3 7,应用类模板特化降低代码膨胀,摘自z:\examples\reduce_code_bloat 31
第4章 标准库及qt对字符串的处理 32
代码段4 1,类模板basic_string的构造函数 35
代码段4 2,类模板basic_string常用构造函数的使用,取自z:\examples\basic_string_demo\main.cpp 36
代码段4 3,basic_string对象和字符串的比较 36
代码段4 4,字符串的不同存放方式,摘自z:\examples\qstring_demo\main.cpp 39
代码段4 5,qstring的字符编码转换功能,摘自z:\examples\qstring_merit\main.cpp 40
第5章 国际化与区域文化 41
代码段5 1,类模板time_get的使用方法,取自z:\examples\locale_time_get\main.cpp 47
代码段5 2,类模板time_put的成员函数put的用法,取自z:\examples\locale_time_
put\main.cpp 48
代码段5 3,类模板codecvt的成员函数in的功能,取自z:\examples\locale_codecvt\
main.cpp 50
代码段5 4,类locale以及facet的实现框架,取自vs 2010安装目录crt\src\xlocale 51
代码段5 5,类locale::id的作用 53
代码段5 6,创建新的facet子类,取自z:\examples\locale_unit\main.cpp 54
第6章 c++的iostream 56
代码段6 1,应用类模板char_traits实现大小写不敏感的字符串类ci_string,取自z:\examples\ci_string\ci_string\main.cpp 63
代码段6 2,对文件流进行读取以及写入操作,取自z:\examples\
fstream_demo\main.cpp 68
代码段6 3,具有多种格式设置的流,取自z:\examples\share_streambuf 74
代码段6 4,流缓冲区的复制,z:\examples\copy_streambuf\main.cpp 75
代码段6 5,二进制文件的读取,摘自z:\examples\process_binary\main.cpp 77
代码段6 6,直接操作二进制文件对应的流缓冲区,摘自z:\examples\
process_binary\main.cpp 77
代码段6 7,用户自定义类型的输入和输出,摘自z:\examples\
overloaded_io\main.cpp 78
第7章 qt的流 79
代码段7 1,使用qfileinfo以及qdir获取各驱动器下的子目录名,取自z:\examples\qdir_demo\main.cpp 81
代码段7 2,使用qfile操作一个文件,取自z:\examples\qfile_read\main.cpp 81
代码段7 3,使用qtextcodec转换编码方案,摘自z:\examples\
qtextstream_demo\main.cpp 82
代码段7 4,使用qdatastream输出二进制数据,摘自z:\examples\
qdatastream_usage\main.cpp 84
代码段7 5,使用qdatastream读取二进制数据,摘自z:\examples\
qdatastream_usage\main.cpp 84
代码段7 6,重载运算符以使qdatastream支持新的数据类型,取自z:\examples\qdatastream_demo\main.cpp 85
代码段7 7,qlocale的使用,摘自z:\examples\qlocale_set\main.cpp 86
第8章 隐式共享与d-pointer技术 88
代码段8 1,采用隐式共享技术的qstring::tocasefolded( ),取自src\
corelib\tools\qstring.cpp 89
代码段8 2,qstring的复制构造函数,摘自src\corelib\tools\qstring.h 90
代码段8 3,类matrix的传统定义方式,摘自z:\examples\d_pointer\matrix\main.cpp 90
代码段8 4,应用d-pointer模式的类matrix,摘自z:\examples\d_pointer\matrix_with_d_pointer\main.cpp 91
代码段8 5,qt 4.5版本中类qlocale的定义,摘自s:\corelib\tools\qlocale.h 93
代码段8 6,qt 4.5版本中类qlocaleprivate的定义,摘自
s:\corelib\tools\qlocale_p.h 93
代码段8 7,修改成员函数tostring()加入qt库的版本信息,摘自
s:\corelib\tools\qlocale.cpp 94
代码段8 8,使用类qlocale的qt应用程序,摘自z:\examples\d_
pointer\test_qlocale\main.cpp 95
代码段8 9,实现d-pointer模式的一个例子 96
代码段8 10,qt中与d-pointer模式相关的宏,摘自src\corelib\global\qglobal.h 97
代码段8 11,宏q_declare_private展开后的结果 97
代码段8 12,qobject及qobjectdata的定义,摘自s:\corelib\kernel\qobject.h 98
代码段8 13,类qobject及qobjectprivate对d-pointer的使用 99
代码段8 14,qwidget继承了qobject的d-pointer模式 99
第9章 qt容器与迭代器 101
代码段9 1,stl风格以及java风格的迭代器,摘自z:\examples\
qlist_change_value\main.cpp 103
代码段9 2,foreach的使用格式,取自z:\examples\foreach_demo\main.cpp 104
代码段9 3,类模板qless,摘自src\corelib\tools\qalgorithms.h 106
代码段9 4,使用qdatastream保存/读取qmap对象,摘自
z:\examples\english_pron\main.cpp 109
代码段9 5,qlistdata的成员函数remove(),摘自src\corelib\tools\qlistdata.cpp 110
代码段9 6,qtypeinfo的定义,摘自src\corelib\global\qglobal.h 110
代码段9 7,qlist的数据结构,摘自src\corelib\tools\qlist.h 111
代码段9 8,向qlist中添加元素,摘自src\corelib\tools\qlist.h 111
代码段9 9,使用qsort对容器排序,摘自z:\examples\qtl_related_words\main.cpp 113
代码段9 10,函子indirectcompare,摘自z:\examples\qtl_thesaurus\main.cpp 113
第10章 多线程与可重入 115
代码段10 1,在qt中创建多线程,摘自z:\examples\simple_thread\main.cpp 116
代码段10 2,互斥体qmutex的使用,取自z:\examples\qmutex\main.cpp 117
代码段10 3,使用互斥体的一个简单方法 118
代码段10 4,用信号量来管理循环缓冲区,摘自z:\examples\qsemaphore\main.cpp 119
代码段10 5,使用条件量管理循环缓冲区,摘自z:\examples\qwaitcondition\main.cpp 120
代码段10 6,以传统方式实现singleton模式 122
代码段10 7,在堆中创建全局对象 123
代码段10 8,简化的成员函数instance() 124
代码段10 9,通过静态局部对象来定义singleton对象 124
代码段10 10,静态局部对象的初始化 125
代码段10 11,c++的判断/赋值操作无法锁定共享资源 125
代码段10 12,qbasicatomicpointer 的定义,摘自s:\corelib\thread\qbasicatomic.h 126
代码段10 13,qbasicatomicpointer 在windows/intel平台上的实现,摘自s:\corelib\arch\qatomic_windows.h 126
代码段10 14,类模板qglobalstatic的定义,摘自s:\corelib\global\qglobal.h 129
代码段10 15,类模板qglobalstaticdeleter的定义,摘自s:\corelib\global\qglobal.h 129
代码段10 16,宏q_global_static的定义,摘自s:\corelib\global\qglobal.h 130
代码段10 17,单线程环境下宏q_global_static的定义,取自
s:\corelib\global\qglobal.h 131
代码段10 18,直接返回一个指向singleton对象的指针 132
代码段10 19,使用一个已经析构的singleton对象,摘自z:\examples\use_destructed_singleton\main.cpp 132
第11章 信号与槽(signals and slots) 134
代码段11 1,qobject对象的定义顺序,摘自z:\examples\
qobject_destruction_order\main.cpp 135
代码段11 2,信号与槽的定义,摘自z:\examples\signals_slots_
demo\signals_slots_declare.h 137
代码段11 3,信号与槽的绑定,摘自z:\examples\signals_slots_demo\main.cpp 137
代码段11 4,类finddialog的定义,摘自
z:\examples\find_dialog\find_dialog.h 140
代码段11 5,类finddialog的构造函数,取自
z:\examples\find_dialog\find_dialog.cpp 141
代码段11 6,类finddialog的构造函数(续),摘自
z:\examples\find_dialog\find_dialog.cpp 142
代码段11 7,类finddialog的槽函数及析构函数,摘自
z:\examples\find_dialog\find_dialog.cpp 143
第12章 graphics/view框架 145
代码段12 1,类mouse的定义,取自z:\examples\collidingmice\mouse.h 147
代码段12 2,类mouse的部分成员函数,取自z:\examples\collidingmice\mouse.cpp 148
代码段12 3,类mouse的成员函数advance(),取自
z:\examples\collidingmice\mouse.cpp 149
代码段12 4,项目collidingmice的主函数,取自
z:\examples\collidingmice\main.cpp 150
第13章 model/view框架 152
代码段13 1,类treemodel的声明,取自z:\examples\mvc\binary_tree\treemodel.h 166
代码段13 2,类treemodel的实现,取自z:\examples\mvc\binary_tree\treemodel.cpp 166
代码段13 3,类treemodel的实现(续),取自
z:\examples\mvc\binary_tree\treemodel.cpp 167
代码段13 4,满二叉树例子的主函数,取自z:\examples\mvc\binary_tree\main.cpp 168
代码段13 5,能够处理更多角色的模型类,取自
z:\examples\mvc\binary_tree_more_role\treemodel.cpp 169
代码段13 6,显示自身发生变化的数据项,取自
z:\examples\mvc\binary_tree_changing_data\treemodel.cpp 170
代码段13 7,更改数据集的标头,取自z:\examples\mvc\
binary_tree_header\treemodel.cpp 172
代码段13 8,编辑满二叉树的叶节点,取自z:\examples\mvc\binary_
tree_editable\treemodel.cpp 173
代码段13 9,重载qabstractlistmodel的虚函数以显示、编辑一个列表,取自z:\examples\mvc\qabstractlistmodel_demo\listmodel.cpp 174
代码段13 10,使用qstandarditemmodel处理列表,取自z:\examples\mvc\qstandarditemmodel_demo\main.cpp 176
代码段13 11,使用qstandarditemmodel处理表格,取自z:\examples\mvc\qstandarditemmodel_demo\main.cpp 176
代码段13 12,使用qstandarditemmodel处理树,取自z:\examples\mvc\qstandarditemmodel_demo\main.cpp 177
代码段13 13,类qstringlistmodel的使用,取自z:\examples\mvc\qstringlistmodel_demo\main.cpp 178
代码段13 14,便利模型类qfilesystemmodel的用法,取自z:\examples\mvc\file_system\main.cpp 179
代码段13 15,用qcolumnview对象显示本地文件系统,取自z:\examples\mvc\qcolumnview_demo\main.cpp 180
代码段13 16,类mainwindow的声明,取自z:\examples\mvc\selection_monitoring\mainwindow.h 183
代码段13 17,类mainwindow实现,取自z:\examples\mvc\selection_monitoring\mainwindow.cpp 183
代码段13 18,同步两个视图对象中的选择信息,取自z:\examples\mvc\sync_selection\main.cpp。 185
代码段13 19,例子spinbox的主函数,取自z:\examples\mvc\
spinboxdelegate\main.cpp 187
代码段13 20,类spinboxdelegate的实现,取自z:\examples\mvc\
spinboxdelegate\delegate.cpp 187
代码段13 21,代理模型索引的创建,取自z:\examples\mvc\revertproxymodel\revertproxymodel.cpp 192
代码段13 22,代理模型revertproxymodel的其他2个接口函数,取自z:\examples\mvc\revertproxymodel\revertproxymodel.h 193
代码段13 23,代理模型revertproxymodel的接口函数parent(),取自z:\examples\mvc\revertproxymodel\revertproxymodel.cpp 194
代码段13 24,接口函数data( )的实现,取自q:\src\gui\itemviews\
qabstractproxymodel.cpp 194
代码段13 25,创建源模型,取自z:\examples\mvc\basicsortfiltermodel\main.cpp 197
代码段13 26,类window的构造函数,取自z:\examples\mvc\
basicsortfiltermodel\window.cpp 197
代码段13 27,令代理模型指向源模型,取自z:\examples\mvc\
basicsortfiltermodel\window.cpp 198
代码段13 28,代理模型对源模型数据项的过滤、排序,取自z:\examples\mvc\basicsortfiltermodel\window.cpp 198
代码段13 29,向qlistwidget中添加数据项,取自z:\examples\mvc\qlistwidget_demo\main.cpp 200
代码段13 30,新闻的表示,z:\examples\mvc\item_roles\newsdialog.cpp 200
代码段13 31,设置qlistwidgetitem所表示数据项中的数据子项,取自z:\examples\mvc\item_roles\newsdialog.cpp 201
代码段13 32,gdp数据的表示,取自z:\examples\mvc\
qtablewidget_demo\main.cpp 202
代码段13 33,类qtablewidget的使用,取自z:\examples\mvc\
qtablewidget_demo\main.cpp 203
代码段13 34,书籍目录的表示,取自z:\examples\mvc\
qtreewidget_demo\main.cpp 204
代码段13 35,构建qtreewidget中的树状模型,取自z:\examples\mvc\qtreewidget_demo\main.cpp 205
第14章 qt中的命令模式 206
代码段14 1,qundocommand的部分定义 208
代码段14 2,类qundocommand部分成员函数的实现,摘自
s:\gui\util\qundostack.cpp 209
代码段14 3,qundostack基本功能部分的定义,取自s:\gui\util\qundostack.h 210
代码段14 4,qundostackprivate的部分定义,取自s:\gui\util\qundostack_p.h 211
代码段14 5,类movecommand的定义,取自
z:\examples\undoframework\commands.h 212
代码段14 6,类movecommand的实现,取自
z:\examples\undoframework\commands.cpp 213
第15章 qt中的抽象工厂模式 215
代码段15 1,依据全局变量创建不同风格的界面元素 216
代码段15 2,抽象工厂模式的使用 217
代码段15 3,latin1到unicode的转换,取自z:\examples\factory_pattern\main.cpp 217
代码段15 4,类qtextcodec的部分定义,取自s:\corelib\codecs\qtextcodec.h 218
代码段15 5,qtextcodec部分成员函数的实现,取自
s:\corelib\codecs\qtextcodec.cpp 219
代码段15 6,类qlatin1codec的定义与实现 219
代码段15 7,类widgetgallery的成员函数changestyle(),取自z:\examples\styles\widgetgallery.cpp 223
代码段15 8,圆角矩形绘制路径的绘制,取自z:\examples\
styles\norwegianwoodstyle.cpp 225
代码段15 9,基本元素的绘制,取自z:\examples\styles\norwegianwoodstyle.cpp 226
代码段15 10,基本元素的绘制(续),取自z:\examples\styles\
norwegianwoodstyle.cpp 228
代码段15 11,norwegianwoodstyle的成员函数drawcontrol,取自z:\examples\styles\norwegianwoodstyle.cpp 229
代码段15 12,更改控件属性的成员函数polish,取自z:\examples\
styles\norwegianwoodstyle.cpp 231
代码段15 13,更改控件尺寸的成员函数pixelmetric,取自z:\examples\styles\norwegianwoodstyle.cpp 231
代码段15 14,设置与风格相关的一些属性,取自z:\examples\
styles\norwegianwoodstyle.cpp 232
代码段15 15,更改应用程序调色板的成员函数polish,取自z:\examples\styles\norwegianwoodstyle.cpp 232
代码段15 16,设置填充图像的私有成员函数settexture,取自z:\examples\styles\norwegianwoodstyle.cpp 233
第16章 qt中的观察者模式 235
代码段16 1,设置qscrollarea为另一控件的观察者,取自
q:\src\gui\widgets\qscrollarea.cpp 238
代码段16 2,将一个qscrollarea对象设置为一个qlabel对象的观察者,取自
z:\examples\imageviewer\imageviewer.cpp 239
代码段16 3,类imageviewer中更改图像显示比例的函数,取自
z:\examples\imageviewer\imageviewer.cpp 240
代码段16 4,鼠标手势及其回调函数的定义,取自
z:\examples\mouse_guesture\mousegesturerecognizer.h 244
代码段16 5,类mousegesturerecognizer的定义,取自
z:\examples\mouse_guesture\mousegesturerecognizer.h 245
代码段16 6,对鼠标轨迹进行识别的核心算法,取自
z:\examples\mouse_guesture\mousegesturerecognizer.cpp 246
代码段16 7,类mousegesture的定义,取自z:\examples\mouse_
guesture\mousegesture.h 247
代码段16 8,类gesturecallbacktosignal 的定义,取自
z:\examples\mouse_guesture\mousegesturefilter.cpp 247
代码段16 9,类mousegesturefilter的定义 248
代码段16 10,鼠标手势的添加与删除,取自z:\examples\mouse_guesture\mousegesturefilter.cpp 249
代码段16 11,事件滤波器及相关函数,取自z:\examples\mouse_guesture\mousegesturefilter.cpp 249
代码段16 12,类mainwindow的定义,取自z:\examples\mouse_
guesture\mainwindow.h 250
代码段16 13,鼠标手势例子的主函数,取自z:\examples\mouse_guesture\main.cpp 251
第17章 qt的元对象系统 252
代码段17 1,类type_info的声明 254
代码段17 2,typeid的操作数可以为基本类型、非多态类及多态类,取自z:\examples\typeid\main.cpp 255
代码段17 3,判断一个qobject派生类的对象是否“具有”某个类型,取自z:\examples\qmetaobject_demo\main.cpp 260
代码段17 4,获取qobject派生类对象的类型信息,取自z:\examples\qmetaobject_demo1\main.cpp 260
代码段17 5,获取qobject派生类对象的数据,取自z:\examples\introspect_
qobject\main.cpp 261
代码段17 6,qvariant的使用,取自z:\examples\qvariant\main.cpp 262
代码段17 7,qvariant支持二进制输入/输出,摘自z:\examples\qvariant\main.cpp 262
第18章 智能指针 263
代码段18 1,qpointer的功能,取自z:\examples\qpointer_demo\main.cpp 264
代码段18 2,对一个对象施加delete运算符,取自z:\examples\delete_
object\main.cpp 264
代码段18 3,具有淡入显示效果的类faderwidget 266
代码段18 4,使用qpointer来判断一个qfaderwidget控件是否存在 267
代码段18 5,qwidget对qpointer的使用,取自s:\gui\kernel\qwidget.cpp 269
代码段18 6,遍历qmultihash中具有相同关键字的元素,取自z:\examples\qmultihash_demo\main.cpp 271
代码段18 7,使用信号量qreadwritelock锁定某个资源以进行写入操作 271
代码段18 8,使用信号量qwritelock锁定某个资源以进行写入操作 272
代码段18 9,与qpointer相关的类型与函数,取自s:\corelib\kernel\qobject.cpp 273
代码段18 10,qpointer的定义,摘自s:\corelib\kernel\qpointer.h 273
代码段18 11,qmetaobject中的相关代码,取自s:\corelib\kernel\qobject.cpp 274
代码段18 12,qobject析构函数中与qpointer相关的代码,摘自
s:\corelib\kernel\qobject.cpp 275
代码段18 13,使用类模板qshareddatapointer 实现隐式共享,取自z:\examples\qsharedatapointer_demo\main.cpp 276
代码段18 14,关于常量型成员函数的约定,取自z:\examples\select_
const\main.cpp 278
代码段18 15,类qshareddata 的定义,取自q:\src\corelib\tools\qshareddata.h 279
代码段18 16,类模板qshareddatapointer的定义(待续),取自
q:\src\corelib\tools\qshareddata.h 279
代码段18 17,类模板qshareddatapointer的定义(待续),取自
q:\src\corelib\tools\qshareddata.h 280
代码段18 18,类模板qshareddatapointer的定义(续),取自
q:\src\corelib\tools\qshareddata.h 280
参考文献 282
索引 284
Qt中的C++技术
光盘服务联系方式: 020-38250260 客服QQ:4006604884
云图客服:
用户发送的提问,这种方式就需要有位在线客服来回答用户的问题,这种 就属于对话式的,问题是这种提问是否需要用户登录才能提问
Video Player
×
Audio Player
×
pdf Player
×
亲爱的云图用户,
光盘内的文件都可以直接点击浏览哦
无需下载,在线查阅资料!