Qt是当前非常流行的C++可视化开发软件。本书全面升级到最新的Qt 6.0平台,通过丰富的实例介绍Qt和QML编程及其应用开发。全书分为7个部分。第1部分为Qt基础,在上一版的基础上基于Qt 6.0的全新类模块和接口,重新实现了所有基础实例的功能。第2部分为Qt 6综合实例,设计了电子商城系统、简单字处理软件、微信客户端程序这三大实用案例。第3部分为Qt扩展应用OpenCV,介绍OpenCV的配置及典型图片处理实例。第4部分为QML和Qt Quick及其应用,基于Qt 6.0支持的Qt Quick Controls 2.5新库实现了诸多典型应用实例。第5部分是Qt Quick 3D开发基础,先从基础的场景、相机、视图、光源等概念入手,通过程序实例介绍Qt 6 3D开发的基础知识,然后通过一个综合的“益智积木”学习软件来演示Qt 6在3D开发上的强大功能。第6部分是Qt 6跨平台开发技术,介绍了Qt 6在Visual Studio、Android、Python及Linux(Ubuntu)等多种主流平台上的环境配置和程序开发。第7部分为附录,介绍了C++相关知识和Qt 6的简单调试。本书提供配套的视频,分析典型案例,通过扫描二维码播放。为了方便读者上机练习,书中实例提供源代码,其编号为CH×××。源代码工程文件可从华信教育资源网(http://www.hxedu.com.cn)免费下载。本书既可作为Qt学习不可多得的一本全面翔实的学习资料和参考用书,也可作为Qt开发技术培训用书。
郑阿奇,曾任教于南京师范大学计算机科学与技术学院,主编多本计算机专业教材,多次获选为国家规划教材,两次获江苏省优秀教学成果二等奖、江苏省畅销图书编辑二等奖、全国高校出版社优秀畅销书二等奖、两次获南京师范大学优秀教学成果一等奖、南京师范大学精品教材一等奖。
目 录
第1部分 Qt 6基础
第1章 Qt 6概述 1
1.1 什么是Qt 1
1.2 Qt 6的安装 2
1.2.1 下载Qt在线安装器和申请免费账号 2
1.2.2 安装Qt 6.x 5
1.2.3 运行Qt Creator 7
1.2.4 Qt 6开发环境简介 8
1.3 Qt 6开发实例介绍 10
1.3.1 设计器(Qt Designer)开发实例 10
1.3.2 代码实现开发实例 19
第2章 Qt 6模板库、工具类及控件 23
2.1 字符串类 23
2.1.1 操作字符串 23
2.1.2 查询字符串数据 24
2.1.3 字符串的转换 25
2.1.4 字符串优化 26
2.2 容器类 28
2.2.1 QList、QLinkedList和QVector类 28
2.2.2 QMap类和QHash类 34
2.3 QVariant类 37
2.4 算法及正则表达式 39
2.4.1 Qt 6常用算法 39
2.4.2 基本的正则表达式 40
2.5 控件 41
2.5.1 按钮组(Buttons) 41
2.5.2 输入部件组(Input Widgets) 43
2.5.3 显示控件组(Display Widgets) 44
2.5.4 空间间隔组(Spacers) 45
2.5.5 布局管理组(Layouts) 45
2.5.6 容器组(Containers) 45
2.5.7 项目视图组(Item Views) 49
2.5.8 项目控件组(Item Widgets) 51
2.5.9 多控件实例 55
第3章 Qt 6布局管理 58
3.1 分割窗口类:QSplitter 58
3.2 停靠窗口类:QDockWidget 60
3.3 堆栈窗体类:QStackedWidget 62
3.4 基本布局类:QLayout 64
3.5 【综合实例】:修改用户资料表单 69
3.5.1 导航页实现 71
3.5.2 “基本信息”页设计 72
3.5.3 “联系方式”页设计 75
3.5.4 “详细资料”页设计 76
3.5.5 编写主函数 78
第4章 Qt 6基本对话框 80
4.1 标准文件对话框类 83
4.1.1 函数说明 83
4.1.2 创建步骤 84
4.2 标准颜色对话框类 85
4.2.1 函数说明 85
4.2.2 创建步骤 85
4.3 标准字体对话框类 86
4.3.1 函数说明 86
4.3.2 创建步骤 86
4.4 标准输入对话框类 87
4.4.1 标准字符串输入对话框 90
4.4.2 标准条目选择对话框 91
4.4.3 标准int类型输入对话框 91
4.4.4 标准double类型输入对话框 92
4.5 消息对话框类 93
4.5.1 Question消息框 96
4.5.2 Information消息框 97
4.5.3 Warning消息框 97
4.5.4 Critical消息框 98
4.5.5 About消息框 98
4.5.6 About Qt消息框 99
4.6 自定义消息框 99
4.7 工具盒类 100
4.8 进度条 105
4.9 调色板与电子钟 108
4.9.1 QPalette类 108
4.9.2 QTime类 114
4.9.3 【综合实例】:电子时钟 114
4.10 可扩展对话框 117
4.11 不规则窗体 120
4.12 程序启动画面类:QSplashScreen 123
第5章 Qt 6主窗口 125
5.1 Qt 6主窗口构成 125
5.1.1 基本元素 125
5.1.2 【综合实例】:文本编辑器 126
5.1.3 菜单与工具栏的实现 129
5.2 Qt 6文件操作功能 134
5.2.1 新建文件 134
5.2.2 打开文件 134
5.2.3 打印文件 137
5.3 Qt 6图像坐标变换 139
5.3.1 缩放功能 139
5.3.2 旋转功能 140
5.3.3 镜像功能 142
5.4 Qt 6文本编辑功能 143
5.4.1 设置字体 146
5.4.2 设置字号 146
5.4.3 设置文字加粗 146
5.4.4 设置文字斜体 147
5.4.5 设置文字加下画线 147
5.4.6 设置文字颜色 147
5.4.7 设置字符格式 148
5.5 Qt 6排版功能 148
5.5.1 实现段落对齐 150
5.5.2 实现文本排序 150
第6章 Qt 6图形与图片 154
6.1 Qt 6位置函数 154
6.1.1 各种位置函数及区别 154
6.1.2 位置函数的应用 155
6.2 Qt 6基础图形的绘制 158
6.2.1 绘图框架设计 158
6.2.2 绘图区的实现 159
6.2.3 主窗口的实现 163
6.3 Qt 6双缓冲机制 175
6.3.1 原理与设计 175
6.3.2 绘图区的实现 176
6.3.3 主窗口的实现 180
6.4 显示Qt 6 SVG格式图片 182
第7章 Qt 6图形视图框架 189
7.1 图形视图体系结构(Graphics View) 189
7.1.1 Graphics View框架结构的主要特点 189
7.1.2 Graphics View框架结构的三元素 189
7.1.3 GraphicsView框架结构的坐标系统 191
7.2 图形视图实例 192
7.2.1 飞舞的蝴蝶实例 192
7.2.2 地图浏览器实例 196
7.2.3 图元创建实例 200
7.2.4 图元的旋转、缩放、切变和位移实例 209
第8章 Qt 6模型/视图结构 216
8.1 概述 216
8.1.1 基本概念 216
8.1.2 模型类/视图类 217
8.2 模型(Model) 219
8.3 视图(View) 222
8.4 代理(Delegate) 234
第9章 Qt 6文件及磁盘处理 242
9.1 读写文本文件 242
9.1.1 使用QFile类读写文本文件 242
9.1.2 使用QTextStream类读写文本文件 243
9.2 读写二进制文件 245
9.3 目录操作与文件系统 247
9.3.1 文件大小及路径获取 247
9.3.2 文件系统浏览 249
9.4 获取文件信息 253
9.5 监视文件和目录变化 257
第10章 Qt 6网络与通信 259
10.1 获取本机网络信息 259
10.2 基于UDP的网络广播程序 262
10.2.1 UDP工作原理 262
10.2.2 UDP 编程模型 263
10.2.3 UDP服务器编程实例 263
10.2.4 UDP客户端编程实例 266
10.3 基于TCP的网络聊天室程序 268
10.3.1 TCP工作原理 269
10.3.2 TCP编程模型 269
10.3.3 TCP服务器端编程实例 269
10.3.4 TCP客户端编程实例 275
10.4 Qt网络应用开发初步 280
10.4.1 简单网页浏览器实例 281
10.4.2 文件下载实例 282
第11章 Qt 6事件处理及实例 285
11.1 鼠标事件实例 285
11.2 键盘事件实例 287
11.3 事件过滤实例 293
第12章 Qt 6多线程 298
12.1 多线程实例 298
12.2 多线程控制 302
12.2.1 互斥量 302
12.2.2 信号量 303
12.2.3 线程等待与唤醒 306
12.3 多线程应用 310
12.3.1 服务器端编程实例 310
12.3.2 客户端编程实例 314
第13章 Qt 6数据库 319
13.1 数据库基本概念 319
13.2 常用SQL命令 322
13.2.1 数据查询 322
13.2.2 数据操作 325
13.3 Qt操作SQLite数据库及实例 326
13.3.1 控制台方式操作及实例 327
13.3.2 【综合实例】:操作SQLite数据库和主/从视图操作XML 333
13.4 Qt操作流行关系数据库及实例 359
第14章 Qt 6操作Office 369
14.1 Qt操作Office的基本方式 369
14.1.1 QAxObject对象访问 369
14.1.2 AxWidget界面显示 371
14.1.3 项目配置 372
14.2 Qt对Office的基本读写 373
14.2.1 程序界面 373
14.2.2 全局变量及方法 374
14.2.3 对Excel的读写 375
14.2.4 对Word的读写 377
14.3 Qt操作Excel实例:计算高考录取率 379
14.3.1 程序界面 380
14.3.2 全局变量及方法 381
14.3.3 功能实现 381
14.3.4 运行演示 383
14.4 Qt操作Word实例 385
14.4.1 读取Word表格数据:中国历年高考数据检索 385
14.4.2 向文档输出表格:输出5年高考信息统计表 389
第15章 Qt 6多国语言国际化 394
15.1 基本概念 394
15.1.1 国际化支持的实现 394
15.1.2 翻译工作:“*.qm”文件的生成 395
15.2 语言国际化应用实例 395
15.2.1 简单测试 395
15.2.2 选择语言翻译文字 399
第16章 Qt 6单元测试框架 405
16.1 QTestLib框架 405
16.2 简单的Qt单元测试 405
16.3 数据驱动测试 411
16.4 简单性能测试 415
第2部分 Qt 6综合实例
第17章 【综合实例】:电子商城系统 417
17.1 商品管理系统功能需求 417
17.1.1 登录功能 417
17.1.2 新品入库功能 418
17.1.3 预售订单功能 419
17.2 项目开发准备 419
17.2.1 项目配置 419
17.2.2 编译MySQL驱动 421
17.2.3 数据库准备 424
17.3 商品管理系统界面设计 429
17.3.1 总体设计 429
17.3.2 “新品入库”页 430
17.3.3 “预售订单”页 431
17.3.4 登录窗口 432
17.4 商品管理系统功能实现 435
17.4.1 登录功能实现 435
17.4.2 主体程序框架 437
17.4.3 界面初始化功能实现 442
17.4.4 新品入库功能实现 445
17.4.5 预售订单功能实现 447
17.5 商品管理系统运行演示 449
17.5.1 登录电子商城 449
17.5.2 新品入库和清仓 450
17.5.3 预售下订单 450
第18章 【综合实例】:简单字处理软件 453
18.1 核心功能界面演示 453
18.2 界面设计与开发 454
18.2.1 菜单系统设计 454
18.2.2 工具栏设计 462
18.2.3 建立MDI程序框架 465
18.2.4 子窗口管理 468
18.2.5 界面生成试运行 475
18.3 基本编辑功能实现 475
18.3.1 打开文档 475
18.3.2 保存文档 478
18.3.3 文档操作 482
18.4 文档排版美化功能实现 483
18.4.1 字体格式设置 483
18.4.2 段落对齐设置 486
18.4.3 颜色设置 488
18.4.4 段落标号、编号 489
18.4.5 文档打印与预览 492
第19章 【综合实例】:微信客户端程序 495
19.1 界面设计与开发 495
19.1.1 核心功能界面演示 495
19.1.2 登录对话框设计 498
19.1.3 聊天窗口设计 499
19.1.4 文件传输服务器界面设计 501
19.1.5 文件传输客户端界面设计 502
19.2 登录功能实现 502
19.3 基本聊天会话功能实现 505
19.3.1 基本原理 506
19.3.2 消息类型与UDP广播 506
19.3.3 会话过程的处理 511
19.3.4 聊天程序试运行 513
19.4 文件传输功能实现 513
19.4.1 基本原理 513
19.4.2 服务器开发 514
19.4.3 客户端开发 519
19.4.4 主界面的控制 522
19.4.5 文件传输试验 525
第3部分 Qt扩展应用:OpenCV
第20章 OpenCV环境搭建 527
20.1 安装CMake 527
20.2 添加系统环境变量 528
20.3 下载OpenCV 529
20.4 下载Contrib 529
20.5 编译前准备 530
20.6 编译配置 533
20.7 开始编译 537
20.8 安装OpenCV库 538
第21章 OpenCV处理图片实例 540
21.1 图片美化实例 541
21.1.1 图片增强实例 541
21.1.2 平滑滤波实例 547
21.2 多图合成实例 553
21.2.1 程序界面 554
21.2.2 全局变量及方法 555
21.2.3 初始化显示 555
21.2.4 功能实现 556
21.2.5 运行效果 557
21.3 图片旋转缩放实例 558
21.3.1 程序界面 558
21.3.2 全局变量及方法 559
21.3.3 初始化显示 560
21.3.4 功能实现 561
21.3.5 运行效果 562
21.4 图片智能识别实例 563
21.4.1 寻找匹配物体实例 563
21.4.2 人脸识别实例 568
第22章 OpenCV【综合实例】:医院远程诊断系统 573
22.1 远程诊断系统功能需求 573
22.1.1 诊疗点科室管理 573
22.1.2 CT影像显示和处理 574
22.1.3 患者信息选项卡 574
22.1.4 后台数据库浏览 574
22.1.5 界面的总体效果 575
22.2 Qt项目工程创建与配置 575
22.3 远程诊疗系统界面设计 578
22.4 远程诊疗系统功能实现 581
22.4.1 数据库准备 581
22.4.2 Qt应用程序主体框架 583
22.4.3 界面初始化功能实现 588
22.4.4 诊断功能实现 590
22.4.5 患者信息表单 592
22.5 远程诊疗系统运行演示 594
22.5.1 启动、连接数据库 594
22.5.2 执行诊断分析 595
22.5.3 表单信息联动 597
22.5.4 查看病历 597
第4部分 QML和Qt Quick及其应用
第23章 QML编程基础 598
23.1 QML概述 598
23.1.1 第一个QML程序 599
23.1.2 QML文档构成 603
23.2 QML可视元素 606
23.2.1 Rectangle(矩形)元素 606
23.2.2 Image(图像)元素 607
23.2.3 Text(文本)元素 609
23.2.4 自定义元素(组件) 611
23.3 QML元素布局 613
23.3.1 Positioner(定位器) 613
23.3.2 Anchor(锚) 618
23.4 QML事件处理 622
23.4.1 鼠标事件 622
23.4.2 键盘事件 624
23.4.3 输入控件与焦点 627
23.5 QML集成JavaScript 629
23.5.1 调用JavaScript函数 629
23.5.2 导入JS文件 631
第24章 QML动画特效 633
24.1 QML动画元素 633
24.1.1 PropertyAnimation元素 633
24.1.2 其他动画元素 638
24.1.3 Animator元素 640
24.2 动画流UI界面 642
24.2.1 状态和切换 642
24.2.2 设计组合动画 645
24.3 图像特效 648
24.3.1 3D旋转 648
24.3.2 色彩处理 650
24.4 饼状菜单 652
第25章 Qt Quick Controls开发基础及实例 655
25.1 Qt Quick Controls概述 655
25.1.1 第一个Qt Quick Controls程序 655
25.1.2 更换界面主题样式 657
25.2 Qt Quick控件 658
25.2.1 概述 658
25.2.2 基本控件 659
25.2.3 高级控件 663
25.2.4 样式定制 668
25.3 Qt Quick对话框 676
25.4 Qt Quick选项标签 681
25.5 Qt Quick扩展库组件实例 686
第5部分 Qt Quick 3D开发基础
第26章 Qt Quick 3D场景、视图与光源 690
26.1 Qt Quick 3D编程基础 690
26.1.1 Qt Quick 3D坐标系统 690
26.1.2 Qt Quick 3D库的引入 691
26.1.3 Qt Quick 3D程序结构 692
26.2 场景中相机位置的变化 695
26.2.1 创建项目及导入资源 696
26.2.2 编写代码 699
26.2.3 运行效果 705
26.3 Node包装模型的加载 706
26.4 视图与光源 708
26.4.1 基本概念 708
26.4.2 程序框架 709
26.4.3 场景中的模型 712
26.4.4 视图及切换 713
26.4.5 光源控制 714
26.4.6 面板设计 718
第27章 Qt Quick 3D【综合实例】:益智积木 721
27.1 “益智积木”软件结构设计 721
27.1.1 导入资源 721
27.1.2 项目结构 724
27.1.3 程序框架 726
27.2 形状的操控 728
27.2.1 面板设计 728
27.2.2 创建物体 732
27.2.3 选择物体 732
27.2.4 移动物体 733
27.2.5 转动物体 734
27.2.6 物体对鼠标事件的响应 736
27.3 更换材质 737
27.4 添加文字 739
27.5 其他形状物体组件的开发 743
第6部分 Qt 6跨平台开发基础
第28章 Visual Studio中的Qt 6开发 747
28.1 MSVC环境安装和配置 747
28.1.1 安装Qt及MSVC编译器 747
28.1.2 安装VS及相关插件 749
28.1.3 配置MSVC编译器 753
28.1.4 安装C++桌面开发组件 754
28.2 VS开发Qt Widgets程序 755
28.2.1 创建Qt Widgets项目 755
28.2.2 配置项目属性 757
28.2.3 开发Qt Widgets程序 758
28.3 VS开发Qt Quick程序 763
28.3.1 创建Qt Quick项目 763
28.3.2 配置项目属性 764
28.3.3 开发Qt Quick程序 764
28.4 VS打开Qt Creator项目 766
28.4.1 打开Qt Widgets项目 766
28.4.2 打开Qt Quick项目 769
第29章 Qt 6中的Android开发 770
29.1 Android开发环境构建 770
29.1.1 安装JDK 8 770
29.1.2 安装Android SDK 773
29.1.3 安装手机驱动 778
29.1.4 添加Qt组件 781
29.1.5 安装Android NDK 782
29.2 Qt开发Android程序 785
29.2.1 用Scroll模板开发滚动图书选项列表 786
29.2.2 用Stack模板展示图书详细信息 791
29.2.3 用Swipe模板滑动翻看艺术作品 796
第30章 Qt 6中的Python开发 800
30.1 Qt的Python开发环境构建 800
30.1.1 安装Python 800
30.1.2 安装PySide2 802
30.1.3 配置编译器 805
30.2 Qt开发Python程序实例 810
30.2.1 开发需求 810
30.2.2 开发准备 810
30.2.3 创建Qt for Python项目 813
30.2.4 Qt设计Python程序界面 815
30.2.5 Python程序框架 816
30.2.6 功能实现 817
第31章 Linux(Ubuntu)上的Qt 6开发 820
31.1 Linux平台安装Qt Creator 820
31.1.1 获取安装包及授权 820
31.1.2 向导安装Qt Creator 823
31.1.3 补充安装依赖组件 825
31.2 配置QMake工具 827
31.2.1 安装qtchooser 827
31.2.2 安装Qt 6 SDK 828
31.2.3 关联QMake与Qt版本 830
31.3 安装GCC编译器 830
31.4 安装其他必备组件 831
31.5 Ubuntu上Qt开发入门 832
31.5.1 创建项目 832
31.5.2 Ubuntu中文输入 838
31.5.3 开发Qt程序 841
第7部分 附 录
附录A C++相关知识 844
A.1 C++程序结构 844
A.2 C++预处理命令 845
A.3 C++异常处理 847
A.4 C++面向对象编程 849
附录B Qt 6简单调试 859
B.1 修正语法错误 859
B.2 设置断点 860
B.3 程序调试运行 860
B.4 查看和修改变量的值 861
B.5 qDebug()的用法 863