内容介绍
本书以Qt 6为开发平台,系统介绍如何用Qt C++开发应用程序。*介绍Qt C++应用程序的基本结构、界面可视化设计和布局管理方法、元对象系统的功能及其应用等基本内容,然后深入讲解常用界面组件、模型/视图结构、事件处理、对话框和多窗口程序设计、文件读写等功能的编程方法,以及数据库、多线程、网络、多媒体、图表、数据可视化、串口通信等功能模块的使用。本书内容丰富,辅以大量精心设计的完整示例程序,涵盖进行GUI程序设计所需掌握的各种技术主题。
目录
第 1章 认识Qt 1
1.1 Qt简介 1
1.1.1 Qt的跨平台开发能力 1
1.1.2 Qt的许可类型和安装包 2
1.1.3 Qt支持的开发语言 3
1.1.4 Qt 6新特性 4
1.2 Qt的安装 5
1.2.1 本书使用的Qt版本 5
1.2.2 安装Qt 5
1.2.3 安装后的Qt 8
1.3 编写一个Hello World程序 9
1.3.1 Qt Creator简介 9
1.3.2 新建一个GUI项目 10
1.3.3 项目的文件组成和管理 12
1.3.4 项目的构建、调试与运行 13
第 2章 GUI程序设计基础 15
2.1 GUI程序结构与运行机制 15
2.1.1 GUI项目文件组成 15
2.1.2 项目配置文件 15
2.1.3 UI文件 17
2.1.4 主程序文件 18
2.1.5 窗口相关的文件 19
2.2 可视化UI设计 23
2.2.1 窗口界面可视化设计 24
2.2.2 界面组件布局管理 25
2.2.3 信号与槽简介 28
2.2.4 信号与槽的使用 29
2.2.5 为应用程序设置图标 31
2.2.6 Qt项目构建过程基本原理 32
2.3 代码化UI设计 33
2.3.1 示例功能概述 33
2.3.2 示例功能实现 33
2.4 使用CMake构建系统 36
2.4.1 CMake项目配置 37
2.4.2 CMake项目构建 38
2.4.3 使用cmake-gui生成Visual Studio项目 40
2.5 Qt Creator使用技巧 41
2.5.1 文本编辑器使用技巧 42
2.5.2 项目管理 42
2.5.3 代码模型 42
第3章 Qt框架功能概述 44
3.1 Qt 6框架中的模块 44
3.1.1 Qt基础模块 44
3.1.2 Qt附加模块 45
3.2 Qt全局定义 45
3.2.1 数据类型定义 46
3.2.2 函数 46
3.2.3 宏定义 47
3.3 Qt的元对象系统 47
3.3.1 元对象系统概述 48
3.3.2 运行时类型信息 50
3.3.3 属性系统 51
3.3.4 信号与槽 53
3.3.5 对象树 57
3.3.6 元对象系统功能测试示例 58
3.4 容器类 63
3.4.1 顺序容器类 63
3.4.2 关联容器类 65
3.4.3 遍历容器的数据 66
3.5 其他常用的基础类 68
3.5.1 QVariant类 68
3.5.2 QFlags类 69
3.5.3 QRandomGenerator类 70
第4章 常用界面组件的使用 72
4.1 界面组件概述 72
4.1.1 常用的界面组件 72
4.1.2 QWidget类的主要属性和接口函数 76
4.2 布局管理 78
4.2.1 布局管理相关的类 79
4.2.2 布局可视化设计及其代码原理 80
4.3 QString字符串操作 83
4.3.1 QString简介 83
4.3.2 QChar的功能 84
4.3.3 QChar主要功能测试 86
4.3.4 QString字符串常用操作 88
4.3.5 QString字符串常用功能测试 93
4.3.6 QString字符串与数值的转换 94
4.3.7 QString字符串与数值转换示例 98
4.4 QSpinBox和QDoubleSpinBox 100
4.4.1 QSpinBox类和QDoubleSpinBox类 100
4.4.2 示例程序 101
4.5 常用的按钮组件 102
4.5.1 各按钮类的接口详解 103
4.5.2 示例程序功能实现 104
4.6 QSlider和QProgressBar 106
4.6.1 各组件类的主要属性和接口函数 106
4.6.2 示例程序功能实现 108
4.7 日期时间数据 109
4.7.1 表示日期时间数据的类 109
4.7.2 日期时间数据的界面组件 113
4.7.3 示例程序功能实现 115
4.8 QTimer和QElapsedTimer 116
4.8.1 QTimer类 116
4.8.2 QElapsedTimer类 117
4.8.3 示例程序功能实现 118
4.9 QComboBox 121
4.9.1 QComboBox类 121
4.9.2 示例程序功能实现 122
4.10 QMainWindow和QAction 125
4.10.1 窗口界面可视化设计 125
4.10.2 QAction类 128
4.10.3 QToolBar类 130
4.10.4 QStatusBar类 130
4.10.5 混合式UI设计 131
4.10.6 QPlainTextEdit的使用 133
4.11 QToolButton和QListWidget 135
4.11.1 窗口界面可视化设计 135
4.11.2 QToolButton与界面补充创建 137
4.11.3 QListWidget的操作 140
4.11.4 创建右键快捷菜单 145
4.12 QTreeWidget 146
4.12.1 窗口界面可视化设计 146
4.12.2 QTreeWidget类 148
4.12.3 QTreeWidgetItem类 151
4.12.4 示例中QTreeWidget的操作 153
4.12.5 用QLabel和QPixmap显示图片 159
4.12.6 示例中QDockWidget的操作 160
4.13 QTableWidget 161
4.13.1 窗口界面可视化设计和初始化 161
4.13.2 QTableWidget类 163
4.13.3 QTableWidgetItem类 165
4.13.4 示例中QTableWidget的操作 166
第5章 模型/视图结构 171
5.1 模型/视图结构概述 171
5.1.1 模型/视图结构基本原理 171
5.1.2 模型 172
5.1.3 视图 172
5.1.4 代理 173
5.1.5 模型/视图结构的一些概念 173
5.1.6 QAbstractItemModel类 175
5.1.7 QAbstractItemView类 177
5.2 QStringListModel和QListView 178
5.2.1 QStringListModel类 179
5.2.2 示例程序功能实现 179
5.3 QStandardItemModel和QTableView 182
5.3.1 QTableView类 183
5.3.2 QStandardItemModel类 183
5.3.3 QStandardItem类 185
5.3.4 QItemSelectionModel类 187
5.3.5 示例程序功能实现 188
5.4 自定义代理 194
5.4.1 自定义代理的功能 195
5.4.2 QStyledItemDelegate类 195
5.4.3 设计自定义代理类 196
5.4.4 使用自定义代理类 199
5.5 QFileSystemModel和QTreeView 199
5.5.1 QFileSystemModel类 200
5.5.2 QTreeView类 202
5.5.3 示例程序功能实现 202
第6章 事件处理 205
6.1 Qt的事件系统 205
6.1.1 事件的产生和派发 205
6.1.2 事件类和事件类型 207
6.1.3 事件的处理 209
6.1.4 典型事件处理示例 210
6.2 事件与信号 213
6.2.1 函数event()的作用 213
6.2.2 事件与信号编程示例 214
6.3 事件过滤器 216
6.3.1 *件过滤器工作原理 217
6.3.2 事件过滤器编程示例 217
6.4 拖放事件与拖放操作 218
6.4.1 拖放操作相关事件 219
6.4.2 外部文件拖放操作示例 219
6.5 具有拖放操作功能的组件 222
6.5.1 示例窗口类定义和初始化 223
6.5.2 拖放操作属性的显示 224
6.5.3 拖放操作属性的设置 226
6.5.4 通过事件过滤器实现项的删除 227
第7章 对话框和多窗口程序设计 228
7.1 标准对话框 228
7.1.1 QFileDialog对话框 229
7.1.2 QColorDialog对话框 231
7.1.3 QFontDialog对话框 232
7.1.4 QProgressDialog对话框 232
7.1.5 QInputDialog标准输入对话框 233
7.1.6 QMessageBox消息对话框 236
7.2 设计和使用自定义对话框 237
7.2.1 QDialog类 238
7.2.2 示例功能概述 239
7.2.3 主窗口类定义和初始化 240
7.2.4 TDialogSize对话框的设计和使用 242
7.2.5 TDialogHeaders对话框的设计和使用 244
7.2.6 TDialogLocate对话框的设计和使用 245
7.3 多窗口应用程序设计 249
7.3.1 窗口类重要特性的设置 249
7.3.2 多窗口应用程序设计示例 251
7.4 MDI应用程序设计 258
7.4.1 QMdiArea类 259
7.4.2 QMdiSubWindow类 261
7.4.3 MDI应用程序设计示例 261
7.5 Splash与登录窗口 266
7.5.1 Splash登录对话框的界面设计和类定义 267
7.5.2 TDialogLogin类的功能实现 268
7.5.3 TDialogLogin对话框的使用 271
第8章 文件系统操作和文件读写 272
8.1 文件操作相关类概述 272
8.1.1 输入输出设备类 272
8.1.2 文件读写操作类 273
8.1.3 特定格式文件的读写 274
8.2 目录和文件操作 274
8.2.1 示例设计概述 275
8.2.2 QCoreApplication类 277
8.2.3 QFile类 277
8.2.4 QFileInfo类 279
8.2.5 QDir类 280
8.2.6 QTemporaryDir类 283
8.2.7 QTemporaryFile类 284
8.2.8 QFileSystemWatcher类 285
8.3 读写文本文件 287
8.3.1 用QFile读写文本文件 287
8.3.2 用QSaveFile保存文件 291
8.3.3 结合使用QFile和QTextStream读写文本文件 292
8.4 读写二进制文件 295
8.4.1 基础知识和工具软件 295
8.4.2 QDataStream类 297
8.4.3 使用预定义编码方式读写文件 299
8.4.4 使用原始二进制数据方式读写文件 308
第9章 数据库 316
9.1 Qt数据库编程概述 316
9.1.1 Qt SQL模块 316
9.1.2 SQLite数据库简介 318
9.1.3 本章示例数据库 318
9.2 QSqlTableModel的使用 319
9.2.1 主要的类和基本工作原理 320
9.2.2 示例窗口界面设计和类定义 323
9.2.3 打开数据库 324
9.2.4 其他功能的实现 332
9.3 QSqlQueryModel的使用 336
9.3.1 QSqlQueryModel类 336
9.3.2 使用QSqlQueryModel实现数据查询 337
9.4 QSqlQuery的使用 341
9.4.1 QSqlQuery类 342
9.4.2 QSqlQuery使用示例 344
9.5 QSqlRelationalTableModel的使用 352
9.5.1 数据表之间的关系 352
9.5.2 QSqlRelationalTableModel类的作用 353
9.5.3 QSqlRelationalTableModel类的主要接口函数 354
9.5.4 示例程序设计 355
第 10章 绘图 358
10.1 QPainter绘图 358
10.1.1 QPainter绘图系统 358
10.1.2 创建示例 360
10.1.3 QPen的主要功能 361
10.1.4 QBrush的主要功能 362
10.1.5 渐变填充 363
10.1.6 QPainter绘制基本图形 367
10.2 坐标系统和坐标变换 370
10.2.1 坐标变换 370
10.2.2 坐标变换绘图实例 371
10.2.3 视口和窗口 373
10.2.4 绘图叠加的效果 375
10.3 图形/视图架构 376
10.3.1 场景、视图与图形项 377
10.3.2 图形/视图架构的坐标系 378
10.3.3 图形/视图架构相关的类 379
10.3.4 图形/视图架构示例程序 381
10.4 图像处理 386
10.4.1 图像表示和图像处理概述 387
10.4.2 QImage类 389
10.4.3 图像处理示例程序 393
10.4.4 打印功能的实现 401
第 11章 自定义插件和库 406
11.1 设计和使用自定义界面组件 406
11.1.1 设计自定义界面组件类TBattery 406
11.1.2 使用自定义界面组件 409
11.2 设计和使用Qt Designer Widget插件 410
11.2.1 创建Qt Designer Widget插件项目 411
11.2.2 插件项目中各文件的功能实现 412
11.2.3 插件的编译与安装 415
11.2.4 使用自定义Widget插件 416
11.3 创建和使用静态库 418
11.3.1 创建静态库 418
11.3.2 使用静态库 420
11.4 创建和使用共享库 421
11.4.1 创建共享库 421
11.4.2 使用共享库 423
第 12章 Qt Charts 425
12.1 Qt Charts模块概述 425
12.1.1 一个简单的QChart绘图程序 425
12.1.2 图表的主要组成部分 427
12.2 通过QChart绘制折线图 429
12.2.1 主窗口类定义和初始化 429
12.2.2 QPen属性设置对话框设计 432
12.2.3 图表各组成部件的属性设置 434
12.3 图表交互操作 444
12.3.1 图表交互操作概述 444
12.3.2 自定义图表视图类TChartView 446
12.3.3 主窗口设计和初始化 449
12.3.4 交互操作功能的实现 451
12.4 饼图和各种柱状图 455
12.4.1 主窗口设计和数据准备 455
12.4.2 柱状图 459
12.4.3 堆叠柱状图 464
12.4.4 百分比柱状图 465
12.4.5 饼图 467
第 13章 Qt Data Visualization 470
13.1 Data Visualization模块概述 470
13.2 三维柱状图 471
13.2.1 示例主窗口设计 472
13.2.2 初始化创建三维柱状图 473
13.2.3 其他功能的实现 477
13.3 三维散点图 483
13.3.1 绘制三维散点图 483
13.3.2 散点数据管理 486
13.4 三维曲面图 487
13.4.1 一般的三维曲面图 488
13.4.2 三维地形图 493
第 14章 多线程 495
14.1 使用QThread创建多线程程序 495
14.1.1 QThread类简介 495
14.1.2 掷骰子的多线程应用程序 496
14.2 线程同步 500
14.2.1 线程同步的概念 500
14.2.2 基于互斥量的线程同步 501
14.2.3 基于读写锁的线程同步 504
14.2.4 基于条件等待的线程同步 506
14.2.5 基于信号量的线程同步 510
第 15章 网络 515
15.1 主机信息查询 515
15.1.1 QHostInfo类和QNetworkInterface类 515
15.1.2 QHostInfo类的使用 516
15.1.3 QNetworkInterface类的使用 518
15.2 TCP通信 519
15.2.1 TCP通信相关的类 520
15.2.2 TCP服务器端程序设计 522
15.2.3 TCP客户端程序设计 526
15.3 UDP通信 528
15.3.1 QUdpSocket类 528
15.3.2 UDP单播和广播 529
15.3.3 UDP组播 533
15.4 基于HTTP的网络应用程序 536
第 16章 多媒体 540
16.1 多媒体模块功能概述 540
16.2 播放音频 541
16.2.1 QMediaPlayer功能概述 541
16.2.2 基于QMediaPlayer的音乐播放器 543
16.2.3 使用QSoundEffect播放音效文件 549
16.3 录制音频 549
16.3.1 QMediaRecorder类功能概述 549
16.3.2 示例功能实现 550
16.4 采集和播放原始音频数据 554
16.4.1 QAudioSource类和QAudioSink类功能概述 554
16.4.2 示例程序功能概述 556
16.4.3 采集原始音频数据 557
16.4.4 播放原始音频数据 563
16.5 播放视频文件 565
16.5.1 在QVideoWidget上播放视频文件 565
16.5.2 在QGraphicsVideoItem上播放视频文件 569
16.6 摄像头的使用 570
16.6.1 摄像头控制概述 570
16.6.2 示例主窗口类定义和初始化 573
16.6.3 拍照 578
16.6.4 录像 579
第 17章 串口编程 581
17.1 Qt Serial Port模块概述 581
17.1.1 QSerialPortInfo类 581
17.1.2 QSerialPort类 581
17.2 串口编程示例:ESP8266模块通信程序 583
17.2.1 自定义标签类TMyLabel的设计和使用 585
17.2.2 主窗口类定义和初始化 585
17.2.3 通过串口读写数据 587
第 18章 其他工具软件和技术 591
18.1 多语言界面 591
18.1.1 多语言界面程序设计概述 591
18.1.2 多语言界面程序设计示例 593
18.2 Qt样式表 597
18.2.1 QSS的作用 597
18.2.2 QSS的句法 598
18.2.3 样式表的使用 603
18.3 Qt应用程序的发布和安装 605
18.3.1 Windows平台上的Qt应用程序发布 605
18.3.2 制作安装文件 607
附录 缩略词 612