第 1章 开发环境准备 1
1.1 Python和Qt简介 1
1.1.1 Python和GUI应用开发 1
1.1.2 Qt简介 2
1.1.3 Qt的Python绑定 2
1.1.4 本书开发环境使用的软件和包 3
1.2 Python环境配置 3
1.2.1 下载和安装Python 3
1.2.2 Python自带的IDE——IDLE 4
1.3 PySide6的安装与卸载 5
1.3.1 安装PySide6 5
1.3.2 PySide6安装后得到的工具软件 6
1.3.3 卸载PySide6 7
1.4 Visual Studio Code安装与Qt for Python设置 7
1.4.1 安装VS Code 7
1.4.2 VS Code的基本使用 7
1.4.3 安装Qt for Python扩展 10
1.4.4 设置Python扩展 11
1.4.5 设置Qt for Python扩展 11
1.5 Qt安装与Qt开发套件 14
1.5.1 安装Qt 15
1.5.2 Qt Creator中的开发套件 17
第 2章 GUI应用设计原理 19
2.1 GUI应用的基本原理 19
2.1.1 创建一个GUI应用 19
2.1.2 GUI应用的基本程序框架 21
2.1.3 在窗口中显示文字 22
2.2 使用UI文件的GUI应用设计 24
2.2.1 创建一个带窗口UI的GUI应用 24
2.2.2 Qt Designer的基本使用 24
2.2.3 项目文件组成与程序原理 26
2.2.4 访问界面中的组件 31
2.3 信号与槽 32
2.3.1 窗口UI可视化设计 32
2.3.2 界面组件布局管理 34
2.3.3 可视化设计信号与槽的连接 37
2.3.4 为组件的信号设计和连接槽函数 38
2.3.5 为应用设置图标 42
2.4 设计和使用自定义信号 42
2.4.1 在VS Code中运行前文中的示例 42
2.4.2 编写一个使用自定义信号的类 43
2.4.3 设计窗口UI 44
2.4.4 创建窗口业务逻辑类 46
2.4.5 信号与槽的特点 48
2.5 Qt Creator和VS Code组合开发Python GUI应用的方法 48
2.5.1 为什么要组合使用Qt Creator和VS Code 48
2.5.2 在Qt Creator中进行UI设计 49
2.5.3 在VS Code中编写Python程序 50
2.5.4 两个单窗口GUI项目模板 54
2.6 从Qt C++类库到PySide6 57
2.6.1 帮助信息的查找 57
2.6.2 正确导入模块中的类 59
2.6.3 数据类型对应关系 60
2.6.4 部分类的接口函数的差异 62
第3章 常用界面组件的使用 63
3.1 界面组件概述 63
3.1.1 常用的界面组件 63
3.1.2 QWidget类的主要属性和接口函数 67
3.2 布局管理 71
3.2.1 布局管理相关的类 71
3.2.2 布局可视化设计及其代码原理 72
3.3 QLineEdit类的使用 76
3.3.1 QLineEdit类接口概述 76
3.3.2 输入掩码 78
3.3.3 验证器 79
3.3.4 示例 83
3.4 常用的按钮组件 87
3.4.1 各按钮类的接口详解 88
3.4.2 示例 89
3.5 QSpinBox类和QDoubleSpinBox类的使用 93
3.5.1 QSpinBox类和QDoubleSpinBox类接口概述 93
3.5.2 示例 94
3.6 滑动型数值输入和显示组件 96
3.6.1 各组件类的主要接口 96
3.6.2 示例 98
3.7 日期时间数据 99
3.7.1 表示日期时间数据的类 100
3.7.2 编辑日期时间数据的界面组件 104
3.7.3 示例 105
3.8 定时器和计时器 106
3.8.1 QTimer类 107
3.8.2 QElapsedTimer类 108
3.8.3 示例 108
3.9 QComboBox类的使用 111
3.9.1 QComboBox类接口概述 112
3.9.2 示例 114
3.10 基于QMainWindow类窗口的应用设计 116
3.10.1 QMainWindow类 117
3.10.2 UI可视化设计 119
3.10.3 QAction类 122
3.10.4 QToolBar类 124
3.10.5 QStatusBar类 124
3.10.6 混合式UI设计 125
3.10.7 QPlainTextEdit组件的使用 127
3.11 QToolButton类和QListWidget类的使用 130
3.11.1 UI可视化设计 130
3.11.2 QToolButton与界面补充创建 133
3.11.3 QList Widget类的接口及操作 135
3.11.4 创建快捷菜单 140
3.12 QTabWidget类的使用 141
3.12.1 QTabWidget类接口概述 142
3.12.2 UI可视化设计 144
3.12.3 示例功能实现 145
3.13 QDockWidget类的使用 148
3.13.1 QDockWidget类 149
3.13.2 QMainWindow中与停靠组件相关的接口 151
3.13.3 示例窗体UI可视化设计 153
3.13.4 示例功能实现 154
3.14 QTreeWidget类的使用 158
3.14.1 UI可视化设计 159
3.14.2 QTreeWidget类 161
3.14.3 QTreeWidgetItem类 164
3.14.4 示例中QTreeWidget组件的操作 166
3.14.5 用QLabel组件显示图片 172
3.14.6 示例中QDockWidget组件的操作 173
3.15 QTableWidget类的使用 174
3.15.1 QTableWidget类 174
3.15.2 QTableWidgetItem类 177
3.15.3 示例窗体UI可视化设计 178
3.15.4 示例功能实现 178
第4章 模型/视图结构 187
4.1 模型/视图结构概述 187
4.1.1 模型/视图基本原理 187
4.1.2 模型 188
4.1.3 视图 189
4.1.4 代理 189
4.1.5 模型/视图结构的相关概念 189
4.1.6 QAbstractItemModel类 191
4.1.7 QAbstractItemView类 193
4.2 QStringListModel类和QListView类的使用 195
4.2.1 QStringListModel类 196
4.2.2 QListView类 196
4.2.3 示例功能实现 198
4.3 QStandardItemModel类和QTableView类的使用 201
4.3.1 QTableView类 201
4.3.2 QStandardItemModel类 203
4.3.3 QStandardItem类 205
4.3.4 QItemSelectionModel类 207
4.3.5 UI可视化设计 208
4.3.6 示例功能实现 209
4.4 自定义代理 215
4.4.1 自定义代理的功能 215
4.4.2 QStyledItemDelegate类 216
4.4.3 设计自定义代理类 217
4.4.4 使用自定义代理类 219
4.5 QFileSystemModel类和QTreeView类的使用 220
4.5.1 QFileSystemModel类 220
4.5.2 QTreeView类 222
4.5.3 示例功能实现 224
第5章 事件处理 227
5.1 Qt的事件系统 227
5.1.1 事件的产生和派发 227
5.1.2 事件类和事件类型 229
5.1.3 事件的处理 231
5.1.4 典型事件处理示例 232
5.2 事件与信号 236
5.2.1 QWidget.event()函数的作用 236
5.2.2 事件与信号编程示例 236
5.3 事件过滤器 238
5.3.1 事件过滤器的工作原理 239
5.3.2 事件过滤器编程示例 239
5.4 拖放事件与拖放操作 240
5.4.1 拖放操作相关事件 241
5.4.2 外部文件拖放操作示例 241
5.5 具有拖放操作功能的组件 244
5.5.1 示例功能概述 245
5.5.2 窗口初始化 245
5.5.3 拖放操作属性的显示 246
5.5.4 拖放操作属性的设置 248
5.5.5 通过事件过滤器实现项的删除 249
第6章 对话框与多窗口应用设计 250
6.1 标准对话框 250
6.1.1 QFileDialog对话框 251
6.1.2 QColorDialog对话框 253
6.1.3 QFontDialog对话框 254
6.1.4 QProgressDialog对话框 255
6.1.5 QInputDialog对话框 256
6.1.6 QMessageBox对话框 258
6.2 设计和使用自定义对话框 260
6.2.1 QDialog类 260
6.2.2 自定义对话框设计示例概述 261
6.2.3 主窗口的UI设计与初始化 263
6.2.4 TDialogSize对话框的设计和使用 265
6.2.5 TDialogHeaders对话框的设计和使用 267
6.2.6 TDialogLocate对话框的设计和使用 269
6.3 多窗口应用程序设计 271
6.3.1 窗口类重要特性的设置 272
6.3.2 多窗口应用示例概述 274
6.3.3 主窗口的UI设计和初始化 275
6.3.4 TFormDoc类窗口的设计和使用 276
6.3.5 TFormTable类窗口的设计和使用 279
6.4 MDI应用程序设计 281
6.4.1 QMdiArea类 282
6.4.2 QMdiSubWindow类 284
6.4.3 MDI应用设计示例 285
6.5 Splash窗口与登录窗口 290
6.5.1 示例功能概述 290
6.5.2 TDialogLogin对话框的设计 290
6.5.3 TDialogLogin对话框的使用 294
第7章 文件操作和文件读写 296
7.1 文件操作相关类概述 296
7.1.1 输入输出设备类 296
7.1.2 文件读写操作类 297
7.1.3 特定格式文件的读写 297
7.2 目录和文件操作 298
7.2.1 示例设计概述 299
7.2.2 QFile类 301
7.2.3 QFileInfo类 303
7.2.4 QDir类 304
7.2.5 QTemporaryDir类 307
7.2.6 QTemporaryFile类 308
7.2.7 QFileSystemWatcher类 309
7.3 读写文本文件 311
7.3.1 示例设计概述 312
7.3.2 用QFile类读写文本文件 312
7.3.3 用QSaveFile类保存文件 316
7.3.4 将QFile类和QTextStream类结合起来读写文本文件 317
7.4 读写二进制文件 320
7.4.1 基础知识和工具软件 320
7.4.2 QDataStream类 322
7.4.3 Qt预定义编码方式读写文件 324
7.4.4 原始数据方式读写文件 333
7.4.5 比较与说明 342
第8章 数据库 343
8.1 Qt数据库编程概述 343
8.1.1 Qt SQL模块 343
8.1.2 SQLite数据库简介 345
8.1.3 本章示例数据库 346
8.2 QSqlTableModel类的使用 347
8.2.1 主要的类 348
8.2.2 示例UI设计和窗口初始化 353
8.2.3 打开数据库和数据表 353
8.2.4 其他功能的实现 360
8.3 QSqlQueryModel类的使用 364
8.3.1 QSqlQueryModel类 364
8.3.2 使用QSqlQueryModel实现数据查询 365
8.4 QSqlQuery类的使用 369
8.4.1 QSqlQuery类 369
8.4.2 示例 372
8.5 QSqlRelationalTableModel类的使用 380
8.5.1 数据表之间的关系 380
8.5.2 QSqlRelationalTableModel类的作用 381
8.5.3 QSqlRelationalTableModel类主要接口函数 382
8.5.4 示例设计 383
第9章 绘图 387
9.1 QPainter绘图 387
9.1.1 QPainter绘图系统 387
9.1.2 创建示例 389
9.1.3 QPen类的主要功能 390
9.1.4 QBrush类的主要功能 391
9.1.5 渐变填充 393
9.1.6 QPainter绘制基本图形 396
9.2 坐标系和坐标变换 400
9.2.1 坐标变换 400
9.2.2 坐标变换绘图示例 401
9.2.3 视口和窗口 404
9.2.4 绘图叠加的效果 406
9.3 设计和使用自定义界面组件 407
9.3.1 示例功能概述 407
9.3.2 设计自定义界面组件类TBattery 408
9.3.3 使用自定义界面组件 410
9.4 图形/视图架构 411
9.4.1 场景、视图与图形项 411
9.4.2 图形/视图架构的坐标系 413
9.4.3 图形/视图架构相关的类 414
9.4.4 示例 417
9.5 图像处理和打印 422
9.5.1 图像表示和图像处理概述 422
9.5.2 QImage类 424
9.5.3 示例 429
9.5.4 打印功能的实现 434
第 10章 二维图表 439
10.1 Qt Charts模块概述 439
10.1.1 一个简单的绘图程序 439
10.1.2 图表的主要组成部分 441
10.2 图表各部分的属性设置 443
10.2.1 主窗口UI设计 444
10.2.2 QPen对象的属性设置对话框设计 445
10.2.3 窗口类TMainWindow的初始化 446
10.2.4 图表各组成部分的属性设置 449
10.3 图表交互操作 461
10.3.1 图表交互操作概述 461
10.3.2 自定义图表视图类TChartView 463
10.3.3 主窗口UI设计和初始化 466
10.3.4 交互操作功能的实现 469
10.4 对数坐标轴和多坐标轴 473
10.4.1 示例功能概述 473
10.4.2 主窗口UI设计和初始化 474
10.4.3 载入数据文件并绘制曲线 475
10.5 各种柱状图和饼图 477
10.5.1 主窗口设计和数据准备 478
10.5.2 柱状图 480
10.5.3 堆叠柱状图 485
10.5.4 百分比柱状图 487
10.5.5 饼图 489
10.6 蜡烛图和日期时间坐标轴 491
10.6.1 示例功能概述 491
10.6.2 绘制蜡烛图用到的类 492
10.6.3 窗口UI设计和初始化 493
10.6.4 绘图功能的实现 495
10.7 面积图 498
10.7.1 面积图简介 499
10.7.2 窗口UI设计与初始化 500
10.7.3 绘图功能的实现 501
10.8 极坐标图 504
10.8.1 极坐标图简介 504
10.8.2 极坐标图绘图示例 505
第 11章 三维数据可视化 510
11.1 三维数据可视化简介 510
11.1.1 Qt Data Visualization模块简介 510
11.1.2 Qt Graphs模块简介 511
11.1.3 两个模块的比较 512
11.2 三维柱状图 512
11.2.1 示例功能概述 513
11.2.2 绘制三维柱状图 514
11.2.3 其他功能的实现 517
11.3 三维散点图 524
11.3.1 绘制三维散点图 524
11.3.2 散点数据管理 527
11.4 三维曲面图 529
11.4.1 绘制一般的三维曲面图 529
11.4.2 绘制三维地形图 534
11.5 三维散点图——基于Qt Graphs模块 536
11.5.1 绘制三维散点图 536
11.5.2 其他功能的实现 538
第 12章 多媒体 541
12.1 多媒体模块功能概述 541
12.2 播放音频 543
12.2.1 QMediaPlayer类功能概述 543
12.2.2 基于QMediaPlayer类的音乐播放器 544
12.2.3 使用QSoundEffect播放音效文件 550
12.3 录制音频 550
12.3.1 QMediaRecorder类功能概述 550
12.3.2 录制音频示例 551
12.4 采集和播放原始音频数据 556
12.4.1 QAudioSource类和QAudioSink类功能概述 556
12.4.2 示例功能概述 559
12.4.3 采集原始音频数据 559
12.4.4 播放原始音频数据 565
12.5 播放视频 566
12.5.1 QMediaPlayer类播放视频的功能概述 566
12.5.2 在QVideoWidget组件中播放视频 567
12.5.3 在QGraphicsVideoItem组件中播放视频 570
12.6 摄像头的使用 571
12.6.1 摄像头控制概述 572
12.6.2 示例功能和窗口UI设计 574
12.6.3 主窗口初始化和基本功能实现 575
12.6.4 拍照 579
12.6.5 录像 580
第 13章 其他工具软件和技术 583
13.1 多语言界面 583
13.1.1 多语言界面设计概述 583
13.1.2 多语言界面设计示例 585
13.2 QSS定制界面 591
13.2.1 QSS的作用 591
13.2.2 QSS句法和规则 593
13.2.3 使用QSS 598
13.3 PySide6应用程序的发布 600
13.3.1 pyside6-deploy.exe功能简介 600
13.3.2 应用程序发布示例 601