第1章 Qt 5简介 1
1.1 Qt 5架构 1
1.1.1 模块架构 1
1.1.2 图形界面库的架构 5
1.1.3 Qt 5架构主要特点 6
1.2 Qt 5的特点 6
1.2.1 Qt 5新增的主要功能 6
1.2.2 Qt 5与Qt 4的兼容性 11
1.2.3 C++还是QML 12
1.2.4 Qt 5源代码文件的编码 12
1.2.5 移动平台开发 13
1.3 小结 13
第2章 将Qt 4代码迁移到Qt 5 14
2.1 Qt 5版本的HelloWorld 14
2.1.1 Qt 5的下载与安装 14
2.1.2 创建Hello World程序 15
2.1.3 Qt 4程序迁移到Qt 5的注意事项 17
2.2 Qt 4程序迁移实例 19
2.2.1 修改编码 19
2.2.2 修改代码 20
2.2.3 设置应用程序图标 21
2.2.4 发布程序 22
2.3 新的信号槽语法 22
2.3.1 新旧语法对比 22
2.3.2 新的语法示例 23
2.4 对C++11的支持 26
2.4.1 Lambda表达式 26
2.4.2 适用于C++11的宏 28
2.5 全新的插件系统 29
2.6 小结 32
第3章 Qt Quick的世界 33
3.1 全新的QML和Qt Quick 33
3.2 Qt Quick项目 36
3.2.1 Qt Quick UI项目 36
3.2.2 Qt Quick Application项目 39
3.2.3 运行示例程序 42
3.2.4 Qt Quick程序的发布 42
3.3 将QML程序迁移到Qt 5 42
3.3.1 Qt 5中QML和Qt Quick的更改 43
3.3.2 QML程序移植示例 46
3.4 小结 48
第4章 QML语法 49
4.1 QML语法基础 49
4.2 import导入语句 51
4.2.1 模块(命名空间)导入语句 52
4.2.2 目录导入语句 53
4.2.3 JavaScript资源导入语句 55
4.3 QML类型系统 55
4.3.1 基本类型 55
4.3.2 JavaScript类型 57
4.3.3 对象类型 57
4.4 对象特性(Attributes) 57
4.4.1 id特性 58
4.4.2 属性特性 58
4.4.3 信号和信号处理器特性 65
4.4.4 方法特性 69
4.4.5 附加属性和附加信号处理器 70
4.5 集成JavaScript 72
4.5.1 JavaScript表达式 72
4.5.2 从JavaScript动态创建QML对象 77
4.5.3 在QML中定义JavaScript资源 81
4.5.4 在QML中导入JavaScript资源 83
4.5.5 JavaScript宿主环境 85
4.6 QML文档 86
4.6.1 通过QML文档定义对象类型 87
4.6.2 QML组件 89
4.6.3 作用域和命名解析 90
4.6.4 资源加载和网络透明性 95
4.6.5 QML的国际化 97
4.6.6 QML的编码约定 100
4.7 QML模块 103
4.7.1 定义一个QML模块 103
4.7.2 支持的QML模块类型 104
4.8 小结 104
第5章 Qt Quick基础 105
5.1 基础可视项目 105
5.1.1 Item 105
5.1.2 Rectangle 109
5.1.3 Text 110
5.1.4 TextInput 117
5.1.5 TextEdit 120
5.2 布局管理 121
5.2.1 定位器(Positioners) 121
5.2.2 基于锚(anchors)的布局 126
5.2.3 Layouts 129
5.3 事件处理 133
5.3.1 MouseArea 133
5.3.2 鼠标事件(MouseEvent)和滚轮事件(WheelEvent) 135
5.3.3 拖放事件(DragEvent) 136
5.3.4 键盘事件(KeyEvent)和焦点作用域(FocusScope) 140
5.3.5 定时器(Timer) 145
5.4 使用Loader动态加载组件 145
5.4.1 Loader的大小与行为 146
5.4.2 从加载的项目中接收信号 147
5.4.3 焦点和键盘事件 147
5.5 小结 148
第6章 Qt Quick控件和对话框 149
6.1 构建第一个示例 149
6.2 ApplicationWindow应用程序窗口 150
6.3 Window 154
6.4 按钮类控件 155
6.4.1 ExclusiveGroup 156
6.4.2 Button 157
6.4.3 CheckBox 157
6.4.4 RadioButton 158
6.4.5 Switch 158
6.5 数据选择类控件 159
6.5.1 ComboBox 159
6.5.2 Slider 160
6.5.3 SpinBox 161
6.6 文本类控件 161
6.6.1 TextField 161
6.6.2 TextArea 162
6.7 其他控件 163
6.7.1 Label 163
6.7.2 GroupBox 163
6.7.3 BusyIndicator 164
6.7.4 ProgressBar 164
6.8 导航类视图 165
6.8.1 ScrollView 165
6.8.2 SplitView 165
6.8.3 StackView 166
6.8.4 TabView 170
6.8.5 TableView 171
6.9 标准对话框 172
6.9.1 ColorDialog 173
6.9.2 FileDialog 173
6.9.3 FontDialog 174
6.9.4 MessageDialog 175
6.10 定义控件样式 176
6.11 小结 177
第7章 图形动画基础 178
7.1 颜色、渐变和调色板 178
7.1.1 颜色(color) 178
7.1.2 渐变(Gradient) 181
7.1.3 系统调色板(SystemPalette) 181
7.2 图片、边界图片和动态图片 182
7.2.1 图片(Image) 182
7.2.2 边界图片(BorderImage) 184
7.2.3 动态图片(AnimatedImage) 185
7.3 缩放、旋转和平移变换 186
7.3.1 使用属性实现简单变换 186
7.3.2 使用Transform实现高级变换 188
7.4 状态(State) 189
7.4.1 创建状态 190
7.4.2 默认状态和when属性 191
7.5 动画和过渡 192
7.5.1 触发动画 193
7.5.2 控制动画的执行 198
7.5.3 精灵动画(Sprite Animations) 199
7.5.4 共享动画实例 203
7.6 Flickable和Flipable 204
7.6.1 弹动效果(Flickable) 204
7.6.2 翻转效果(Flipable) 206
7.7 小结 207
第8章 图形效果 208
8.1 混合效果(Blend) 209
8.2 颜色效果(Color) 211
8.3 渐变效果(Gradient) 214
8.3.1 锥形渐变(ConicalGradient) 214
8.3.2 线性渐变(LinearGradient) 215
8.3.3 辐射渐变(RadialGradient) 215
8.4 变形效果(Distortion) 216
8.5 阴影效果(Drop Shadow) 217
8.5.1 投影(DropShadow) 217
8.5.2 内阴影(InnerShadow) 218
8.6 模糊效果(Blur) 219
8.6.1 快速模糊(FastBlur) 219
8.6.2 高斯模糊(GaussianBlur) 220
8.6.3 递归模糊(RecursiveBlur) 220
8.6.4 遮罩模糊(MaskedBlur) 221
8.7 动感模糊效果(Motion Blur) 222
8.7.1 方向模糊(DirectionalBlur) 222
8.7.2 径向模糊(RadialBlur) 223
8.7.3 缩放模糊(ZoomBlur) 224
8.8 发光效果(Glow) 225
8.8.1 发光(Glow) 225
8.8.2 矩形发光(RectangularGlow) 226
8.9 遮罩效果(Mask) 227
8.9.1 不透明遮罩(OpacityMask) 227
8.9.2 阀值遮罩(ThresholdMask) 228
8.10 小结 229
第9章 粒子系统 230
9.1 ParticleSystem 230
9.2 发射器(Emitter) 232
9.3 渲染器(ParticlePainters) 233
9.4 TrailEmitter 236
9.5 粒子组 237
9.6 随机参数 239
9.7 影响器(Affector) 240
9.8 小结 245
第10章 Canvas基础 246
10.1 Canvas的使用 246
10.2 绘制操作 248
10.2.1 绘制参数设置 248
10.2.2 绘制矩形 250
10.2.3 状态的保存与恢复 251
10.2.4 绘制文本 252
10.2.5 绘制路径 254
10.3 渐变填充 259
10.3.1 线性渐变 259
10.3.2 辐射渐变 260
10.3.3 锥形渐变 261
10.4 阴影 261
10.5 使用图像 262
10.6 坐标变换 264
10.6.1 平移 264
10.6.2 缩放 265
10.6.3 旋转 266
10.6.4 扭曲 267
10.6.5 transform()函数总结 267
10.7 小结 268
第11章 模型和视图 269
11.1 模型/视图架构简介 269
11.2 数据模型 271
11.2.1 ListModel 271
11.2.2 WorkerScript 273
11.2.3 ObjectModel 275
11.2.4 DelegateModel 275
11.2.5 Package 277
11.2.6 XmlListModel 278
11.2.7 LocalStorage 279
11.2.8 使用C++扩展QML模型 282
11.3 视图类型 285
11.3.1 ListView 286
11.3.2 GridView 291
11.3.3 视图过渡 292
11.3.4 PathView 295
11.3.5 WebView 298
11.4 调整性能 299
11.5 小结 300
第12章 多媒体应用 301
12.1 多媒体模块介绍 301
12.2 播放音频 302
12.2.1 播放压缩音频 302
12.2.2 播放未压缩音频 304
12.3 播放视频 304
12.3.1 使用Video播放视频文件 304
12.3.2 对视频使用图形效果 305
12.4 媒体播放器(MediaPlayer) 308
12.4.1 播放音视频 308
12.4.2 使用Windows平台附加功能 309
12.5 小结 314
第13章 QML与C++的集成 315
13.1 QML运行时的C++类 316
13.1.1 QQmlEngine 316
13.1.2 QQmlContext 317
13.1.3 QQmlComponent 318
13.1.4 QQmlExpression 320
13.2 在QML中使用C++特性 320
13.2.1 数据类型处理和拥有权 320
13.2.2 数据类型的转换 321
13.2.3 使用C++属性 323
13.2.4 使用函数和槽 327
13.2.5 使用信号 328
13.3 注册QML类型 329
13.3.1 注册可实例化对象类型 329
13.3.2 注册不可实例化对象类型 330
13.3.3 注册单例类型 330
13.3.4 类型的修订和版本 331
13.4 定义QML特定类型和属性 332
13.4.1 提供附加对象注解数据 332
13.4.2 属性修饰符类型 335
13.4.3 指定QML对象类型的默认属性 337
13.4.4 接收对象初始化通知 337
13.5 在C++中使用QML对象 338
13.5.1 使用C++加载QML对象 338
13.5.2 使用对象名字访问加载的QML对象 339
13.5.3 使用C++访问QML对象成员 340
13.6 小结 343
第14章 使用Qt Quick设计器 344
14.1 常用操作介绍 345
14.1.1 管理项目层次 345
14.1.2 QML类型库 346
14.1.3 指定项目属性 347
14.1.4 添加状态 349
14.1.5 在画布上操作QML类型 349
14.2 使用设计器编辑QML文档 351
14.2.1 创建项目 351
14.2.2 创建主视图 351
14.2.3 添加视图 355
14.2.4 为视图添加动画 356
14.3 小结 358
附录A Qt版本介绍 359
附录B Qt 5中C++API更改 361
附录C QML常用术语 371
参考文献 373