Qt 是软件开发领域中非常著名的C++可视化开发平台。本书以Qt 5.15 为平台,系统介绍Qt 5 的各种功能,在此基础上配套各种实例,然后综合应用各种功能开发综合应用实例。全书分为以下5 部分。第1 部分为Qt 5 基础(第1~11 章),内容包括Qt 概述,模板库、工具类及控件,布局管理,基本对话框及实例,主窗口及实例,事件处理及实例,绘图及实例,文件、目录与数据库操作,模型/视图及实例,网络通信及实例,定时器、线程和DLL 库。第2 部分为综合应用实例(第12~15 章),内容包括图元、鼠标事件、序列化、工具栏综合应用实例(我的绘图板),MDI、文件目录、树、Python综合应用实例(文档分析器),网络通信、SQLite、图元系统、实时语音综合应用实例(简版微信),多媒体、线程、视频图元、MySQL 综合应用实例(简版抖音)。第3 部分为Qt 5.15 和OpenCV 综合应用(第16~18 章),内容包括Qt 5.15+OpenCV(含Contrib)-4.6.0 环境搭建,OpenCV 图片处理及实例,OpenCV、树控件、表格控件综合应用实例(医院远程诊断系统)。第4 部分为QML 编程基础、QML 动画特效和Qt Quick Controls 开发基础(第19~21 章)。第5 部分为网络资源文件和文档(可免费下载),包括本书所有实例和综合应用实例的工程文件、21 个PPT 教学培训课件、57 个实例开发教学视频文件、电子商城系统综合实例文档、MyWord 字处理软件综合实例文档,Qt 5 操作Office 实例文档等。附录A 为Qt 5 简单调试。本书既可作为Qt 5 开发人员的学习和参考用书,也可作为高等院校相关专业教材或Qt 5 培训用书。
郑阿奇,副教授,曾任教于南京师范大学。先后主编出版计算机教材和图书超过100本,受到市场广泛好评。出版的教材曾获得高等教育国家“十一五”规划教材、高等职业教育“十二五”国家规划教材、高等职业教育“十三五”国家规划教材、江苏省高等职业教育“十四五”规划教材、江苏省教学成果二等奖、高等职业教育优秀教材一等奖等荣誉。
第1 章 Qt 概述·······································································································.1
1.1 什么是Qt···································································································.1
1.1.1 Qt 的产生和发展···················································································.1
1.1.2 Qt 5.15 与Qt 6 ······················································································.2
1.2 Qt 5.15 的安装····························································································.2
1.2.1 下载Qt 在线安装器和申请免费账号··························································.2
1.2.2 安装过程·····························································································.4
1.2.3 运行Qt Creator ·····················································································.7
1.2.4 Qt 5.15 开发环境···················································································.8
1.3 Qt 5.15 开发入门实例·················································································.9
1.3.1 设计器Qt Designer 开发实例··································································.10
1.3.2 直接代码开发实例···············································································.19
第2 章 模板库、工具类及控件··············································································.24
2.1 字符串类··································································································.24
2.1.1 操作字符串························································································.24
2.1.2 查询字符串数据··················································································.25
2.1.3 字符串的转换·····················································································.26
2.2 容器类·····································································································.27
2.2.1 QList、QLinkedList 和QVector ·······························································.28
2.2.2 QMap 和QHash ··················································································.33
2.3 QVariant ···································································································.36
2.4 算法及正则表达式····················································································.38
2.4.1 常用算法···························································································.38
2.4.2 基本的正则表达式···············································································.39
2.5 控件·········································································································.40
2.5.1 按钮组(Buttons) ··············································································.40
2.5.2 输入部件组(Input Widgets)·································································.42
2.5.3 显示控件组(Display Widgets)······························································.43
2.5.4 空间间隔组(Spacers) ········································································.44
2.5.5 布局管理组(Layouts) ········································································.44
2.5.6 容器组(Containers)···········································································.44
2.5.7 项目视图组(Item Views) ····································································.46
2.5.8 项目控件组(Item Widgets)··································································.48
2.5.9 多控件实例························································································.52
第3 章 布局管理···································································································.56
3.1 分割窗口类:QSplitter··············································································.56
3.2 停靠窗口类:QDockWidget ······································································.58
3.3 堆栈窗体类:QStackedWidget ···································································.60
3.4 基本布局类:QLayout ··············································································.62
3.5 布局管理综合实例····················································································.67
第4 章 基本对话框及实例·····················································································.78
4.1 标准文件对话框类····················································································.81
4.1.1 函数说明···························································································.81
4.1.2 创建步骤···························································································.82
4.2 标准颜色对话框类····················································································.83
4.2.1 函数说明···························································································.83
4.2.2 创建步骤···························································································.83
4.3 标准字体对话框类····················································································.84
4.3.1 函数说明···························································································.84
4.3.2 创建步骤···························································································.84
4.4 标准输入对话框类····················································································.85
4.4.1 标准字符串输入对话框·········································································.88
4.4.2 标准条目选择对话框············································································.89
4.4.3 标准int 类型输入对话框·······································································.89
4.4.4 标准double 类型输入对话框··································································.90
4.5 消息对话框类···························································································.91
4.5.1 Question 消息对话框············································································.93
4.5.2 Information 消息对话框·········································································.94
4.5.3 Warning 消息对话框·············································································.95
4.5.4 Critical 消息对话框··············································································.95
4.5.5 About 消息对话框···············································································.96
4.5.6 About Qt 消息对话框············································································.96
4.6 自定义消息对话框····················································································.97
4.7 工具盒类··································································································.98
4.8 进度条····································································································.102
4.9 调色板与电子钟······················································································.106
4.9.1 QPalette ····························································································106
4.9.2 QTime ·····························································································.111
4.9.3 电子钟实例·······················································································.112
4.10 可扩展对话框························································································.115
4.11 不规则窗体····························································································.118
4.12 程序启动画面类:QSplashScreen····························································.120
第5 章 主窗口及实例···························································································.123
5.1 主窗口构成·····························································································.123
5.1.1 基本元素··························································································.123
5.1.2 文本编辑器项目框架···········································································.124
5.1.3 菜单与工具栏的实现···········································································.127
5.2 文件操作功能··························································································.131
5.2.1 新建文件··························································································.131
5.2.2 打开文件··························································································.132
5.2.3 打印文件··························································································.134
5.3 图像坐标变换··························································································.137
5.3.1 缩放功能··························································································.137
5.3.2 旋转功能··························································································.138
5.3.3 镜像功能··························································································.140
5.4 文本编辑功能··························································································.141
5.4.1 设置字体··························································································.143
5.4.2 设置字号··························································································.144
5.4.3 设置文字加粗····················································································.144
5.4.4 设置文字斜体····················································································.145
5.4.5 设置文字加下画线··············································································.145
5.4.6 设置文字颜色····················································································.145
5.4.7 设置字符格式····················································································.146
5.5 排版功能·································································································.146
5.5.1 实现段落对齐····················································································.147
5.5.2 实现文本排序····················································································.148
第6 章 事件处理及实例·······················································································.151
6.1 鼠标事件·································································································.151
6.2 键盘事件·································································································.153
6.3 事件过滤器·····························································································.159
第7 章 绘图及实例······························································································.164
7.1 基础图形的绘制······················································································.164
7.1.1 绘图基础类·······················································································.164
7.1.2 QPainter 绘图框架实例········································································.174
7.1.3 绘制实时时钟实例··············································································.187
7.2 GraphicsView 绘图···················································································.190
7.2.1 视图、场景、图元的概念·····································································.190
7.2.2 GraphicsView 坐标系统········································································.192
7.2.3 飞舞的蝴蝶实例·················································································.193
7.3 二维图表绘制··························································································.196
7.3.1 QtCharts 基础····················································································.196
7.3.2 绘制螺旋曲线实例··············································································.198
7.3.3 绘制柱状/折线图实例··········································································.201
7.3.4 绘制饼状图实例·················································································.203
7.4 三维绘图·································································································.205
7.4.1 QtDataVisualization 基础······································································.205
7.4.2 三维绘图实例····················································································.207
第8 章 文件、目录与数据库操作·········································································.210
8.1 文件操作·································································································.210
8.1.1 文本文件操作实例··············································································.210
8.1.2 二进制文件操作实例···········································································.213
8.2 目录操作·································································································.215
8.2.1 文件大小及路径获取实例·····································································.215
8.2.2 文件系统浏览实例··············································································.217
8.2.3 获取文件信息实例··············································································.220
8.3 数据库操作·····························································································.224
8.3.1 数据库与SQL 基础············································································.224
8.3.2 QtSql································································································231
8.3.3 操作SQLite 实例···············································································.233
8.3.4 操作MySQL 实例··············································································.237
8.3.5 操作SQL Server 实例··········································································.243
第9 章 模型/视图及实例······················································································.248
9.1 模型/视图架构·························································································.248
9.1.1 基本概念··························································································.248
9.1.2 实现类·····························································································.249
9.2 常用模型/视图组件实例···········································································.250
9.2.1 表格模型/视图及实例··········································································.250
9.2.2 树状模型/视图及实例··········································································.253
9.2.3 文件目录浏览器实例···········································································.256
9.2.4 自定义模型实例·················································································.258
9.3 代理及应用实例······················································································.262
9.3.1 代理概念及开发步骤···········································································.262
9.3.2 代理应用实例····················································································.264
9.4 综合实例:汽车信息管理系统·································································.271
9.4.1 开发前的准备····················································································.272
9.4.2 开发视图界面····················································································.273
9.4.3 连接数据库·······················································································.276
9.4.4 开发主/从视图···················································································.283
9.4.5 添加/删除汽车信息·············································································.287
第10 章 网络通信及实例·····················································································.296
10.1 获取本机网络信息·················································································.296
10.2 基于UDP 的数据通信············································································.299
10.2.1 UDP 工作原理·················································································.299
10.2.2 UDP 应用实例·················································································.301
10.3 基于TCP 的数据通信············································································.306
10.3.1 TCP 工作原理··················································································.306
10.3.2 TCP 应用实例··················································································.309
第11 章 定时器、线程和DLL 库··········································································.320
11.1 定时器和线程························································································.320
11.1.1 定时器:QTimer···············································································.320
11.1.2 线程:QThread·················································································.322
11.2 Qt 程序开发和调用DLL 库····································································.326
11.2.1 开发DLL························································································.326
11.2.2 使用DLL························································································.329
第12 章 图元、鼠标事件、序列化、工具栏综合应用实例:我的绘图板···············.334
【技术基础】···································································································.335
12.1 绘图相关技术························································································.335
12.2 绘图场景数据结构·················································································.336
12.2.1 数据结构设计··················································································.336
12.2.2 数据结构实现··················································································.337
12.2.3 数据结构处理··················································································.339
【实例开发】···································································································.341
12.3 创建项目·······························································································.341
12.3.1 项目设置························································································.341
12.3.2 界面设计························································································.344
12.3.3 程序框架························································································.346
12.4 主界面开发···························································································.350
12.4.1 文件管理栏开发···············································································.350
12.4.2 样式栏开发·····················································································.351
12.4.3 工具箱开发·····················································································.355
12.4.4 绘图区和状态栏开发·········································································.356
12.5 绘图功能开发························································································.359
12.5.1 创建图元························································································.359
12.5.2 调整图元大小··················································································.365
12.5.3 设置样式························································································.368
12.5.4 操纵图元························································································.376
12.6 图元文件管理························································································.377
第13 章 MDI、文件目录、树、Python 综合应用实例:文档分析器······················.383
【技术基础】···································································································.384
【实例开发】···································································································.384
13.1 创建项目·······························································································.384
13.1.1 项目设置························································································.384
13.1.2 界面设计························································································.388
13.1.3 程序框架························································································.391
13.2 文档的管理···························································································.398
13.2.1 目录导航························································································.398
13.2.2 文档归类························································································.399
13.2.3 打开文档························································································.401
13.2.4 多文档窗口布局···············································································.403
13.3 文档的分析···························································································.405
13.3.1 文本的分析·····················································································.406
13.3.2 获取网页主题链接············································································.410
13.3.3 识别、扫描书页文字·········································································.412
13.3.4 分析结果处理··················································································.417
13.4 其他功能·······························································································.418
第14 章 网络通信、SQLite、图元系统、实时语音综合应用实例:简版微信········.420
【技术基础】···································································································.421
14.1 网络通信·······························································································.421
14.1.1 UDP 收发消息·················································································.421
14.1.2 TCP 传输························································································.423
14.2 服务器数据库························································································.425
14.2.1 创建数据库MyWeDb·········································································.425
14.2.2 数据库访问与操作············································································.426
14.3 SQLite 应用···························································································.427
14.3.1 创建SQLite·····················································································.427
14.3.2 记录日志························································································.428
14.3.3 加载日志························································································.429
14.4 用到的其他控件和技术··········································································.430
【实例开发】···································································································.430
14.5 创建项目·······························································································.430
14.5.1 客户端项目·····················································································.430
14.5.2 服务器项目·····················································································.440
14.6 界面开发·······························································································.443
14.6.1 界面设计························································································.443
14.6.2 初始化···························································································.446
14.6.3 界面切换························································································.448
14.7 基本功能开发························································································.449
14.7.1 用户管理························································································.449
14.7.2 文字聊天························································································.454
14.7.3 信息暂存与转发···············································································.457
14.8 增强功能开发························································································.459
14.8.1 功能演示························································································.459
14.8.2 文件、图片、语音的传输···································································.461
14.8.3 实时语音通话··················································································.472
第15 章 多媒体、线程、视频图元、MySQL 综合应用实例:简版抖音·················.477
【技术基础】···································································································.477
15.1 视频播放处理························································································.477
15.2 MySQL 数据库······················································································.478
15.2.1 设计数据库MyTikTok ·······································································.478
15.2.2 访问与操作数据库············································································.480
15.2.3 特殊数据类型读写············································································.481
【实例开发】···································································································.481
15.3 创建项目·······························································································.481
15.3.1 项目结构························································································.481
15.3.2 主程序框架·····················································································.485
15.4 主界面开发···························································································.489
15.4.1 界面设计························································································.489
15.4.2 初始化···························································································.491
15.4.3 运行效果························································································.492
15.5 视频基本功能开发·················································································.492
15.5.1 视频播放························································································.492
15.5.2 视频控制························································································.497
15.5.3 视频信息显示··················································································.498
15.6 特色功能开发························································································.501
15.6.1 关注和点赞·····················································································.501
15.6.2 评论与弹幕·····················································································.505
15.6.3 根据用户喜好推荐视频······································································.509
15.7 视频发布·······························································································.513
15.7.1 界面设计························································································.513
15.7.2 视频预览························································································.514
15.7.3 视频发布························································································.515
第16 章 Qt 5.15+OpenCV(含Contrib)-4.6.0 环境搭建····································.519
16.1 准备工作·······························································································.519
16.2 配置编译器···························································································.522
16.3 编译OpenCV·························································································.527
16.4 安装OpenCV·························································································.528
第17 章 OpenCV 图片处理及实例·······································································.531
17.1 图片美化·······························································································.531
17.1.1 图片增强························································································.531
17.1.2 平滑滤波························································································.537
17.2 多图合成·······························································································.543
17.2.1 程序界面························································································.544
17.2.2 全局变量及方法···············································································.545
17.2.3 初始化显示·····················································································.545
17.2.4 功能实现························································································.546
17.2.5 运行效果························································································.547
17.3 图片旋转缩放························································································.548
17.3.1 程序界面························································································.548
17.3.2 全局变量及方法···············································································.549
17.3.3 初始化显示·····················································································.550
17.3.4 功能实现························································································.551
17.3.5 运行效果························································································.552
17.4 图片智能识别························································································.553
17.4.1 寻找匹配物体··················································································.553
17.4.2 人脸识别························································································.557
第18 章 OpenCV、树控件、表格控件综合应用实例:医院远程诊断系统············.563
18.1 功能需求·······························································································.563
18.1.1 诊疗点科室管理···············································································.563
18.1.2 CT 相片显示和处理···········································································.564
18.1.3 患者信息选项卡···············································································.564
18.1.4 后台数据库浏览···············································································.564
18.1.5 界面的总体效果···············································································.565
18.2 Qt 项目工程创建与配置·········································································.565
18.3 界面设计·······························································································.567
18.4 功能实现·······························································································.570
18.4.1 数据库准备·····················································································.570
18.4.2 Qt 应用程序主体框架········································································.572
18.4.3 界面初始化功能实现·········································································.577
18.4.4 诊断功能实现··················································································.578
18.4.5 患者信息表单··················································································.581
18.5 医院远程诊断系统运行演示···································································.583
18.5.1 启动、连接数据库············································································.583
18.5.2 执行诊断分析··················································································.584
18.5.3 表单信息联动··················································································.585
18.5.4 查看病历························································································.586
第19 章 QML 编程基础·······················································································.587
19.1 QML 概述·····························································································.587
19.1.1 第一个QML 程序·············································································.588
19.1.2 QML 文档构成·················································································.592
19.2 QML 可视元素······················································································.595
19.2.1 矩形元素:Rectangle ·········································································.595
19.2.2 图像元素:Image··············································································.596
19.2.3 文本元素:Text················································································.598
19.2.4 自定义元素(组件) ·········································································.600
19.3 QML 元素布局······················································································.602
19.3.1 定位器:Positioner ············································································.602
19.3.2 锚:Anchor ·····················································································.607
19.4 QML 事件处理······················································································.611
19.4.1 鼠标事件························································································.611
19.4.2 键盘事件························································································.613
19.4.3 输入控件与焦点···············································································.616
19.5 QML 集成JavaScript··············································································.618
19.5.1 调用JavaScript 函数··········································································.618
19.5.2 导入JS 文件····················································································.620
第20 章 QML 动画特效·······················································································.623
20.1 QML 动画元素······················································································.623
20.1.1 PropertyAnimation 元素······································································.623
20.1.2 其他动画元素··················································································.628
20.1.3 Animator 元素··················································································.630
20.2 流UI 界面·····························································································.632
20.2.1 状态切换机制··················································································.632
20.2.2 设计组合动画··················································································.635
20.3 图像特效·······························································································.638
20.3.1 3D 旋转··························································································.638
20.3.2 色彩处理························································································.639
第21 章 Qt Quick Controls 开发基础···································································.642
21.1 Qt Quick Controls 概述···········································································.642
21.1.1 第一个Qt Quick Controls 程序·····························································.642
21.1.2 更换界面主题样式············································································.644
21.2 Qt Quick 控件························································································.645
21.2.1 概述······························································································.645
21.2.2 基本控件························································································.645
21.2.3 高级控件························································································.650
21.2.4 样式定制························································································.654
21.3 Qt Quick 对话框·····················································································.662
21.4 Qt Quick 选项标签·················································································.667
附录A Qt 5 简单调试···························································································.673
A.1 修正语法错误·························································································.673
A.2 设置断点································································································.674
A.3 程序调试运行·························································································.674
A.4 查看和修改变量的值··············································································.675
A.5 qDebug()的用法······················································································.677