《Qt 5/PyQt 5实战指南》目录
-----------------------------------------------------------------
本书特色
(1)兼顾Qt 5、PyQt 5。
本书既有C++语言的Qt 5知识,又有Python语言的PyQt 5的知识。本书设计了130个精品案例,其中C++版的Qt 5案例78个,PyQt 5版的案例52个。通过学习两种编程语言的案例,可以更好的满足实际研发工作对编程技能的需求。
(2)系统性组织案例,真正实用。
本书的组织有利于系统性学习开发技能。本书在内容组织上掌握循序渐进原则,前面的案例为后面的案例打基础。本书重点关注软件设计及实战技能,而非罗列一堆控件接口说明,比如:在开发大型项目时pri文件的设计与使用、配置文件的开发方法、类对象的二进制文件的序列化、向前兼容的二进制文件格式设计、带子属性的属性窗等都属于实用的软件研发技术案例。
(3)配套练习,加深理解。
除第1、23、24章外,每章后均附有配套练习,本书提供超过140道配套练习题。通过针对性练习,可以加深对知识的理解与掌握,更快投入真正的研发工作。
(4)拒绝从零开始。
课件配套代码含有改动前的基础代码、改动后的最终代码。其中改动前的代码在src.baseline目录,改动后的最终代码在src目录。读者无需从零开始创建项目,可以在改动前的基础代码上对照案例讲解的内容直接进行修改,这样可以有效提高学习效率。在案例开头一般都配有运行效果图。
【注意】:页码为书稿的页码,出版后的页码可能有出入。
-----------------------------------------------------------------
第1章 准备工作 …………………………………………………………………………… 1
1.1 推荐的开发环境 ……………………………………………………………………… 1
1.2 安装 VisualStudio2017 …………………………………………………………… 1
1.3 安装 Python ………………………………………………………………………… 2
1.4 安装 LLVM ………………………………………………………………………… 4
1.5 用编译的方式安装 Qt5.11.1 ……………………………………………………… 5
1.6 用安装包安装 Qt5.11.1 …………………………………………………………… 7
1.7 在 Linux上编译代码出错时的处理 ……………………………………………… 11
1.8 配套源代码 ………………………………………………………………………… 12
第2章 pro与pri…………………………………………………………………………… 13
2.1 案例1 通过一个简单的 EXE来介绍pro的基本配置 ………………………… 13
2.2 案例2 整理一下目录吧 ………………………………………………………… 19
2.3 案例3 加点料———增加一张图片 ……………………………………………… 26
2.4 知识点 pro文件常用配置………………………………………………………… 28
2.5 知识点 pri文件有什么用 ………………………………………………………… 32
2.6 知识点 一劳永逸,引入pri体系 ………………………………………………… 36
2.7 案例4 还是不知道pri怎么用? 来练练手吧 …………………………………… 44
2.8 配套练习 …………………………………………………………………………… 47
第3章 多国语言国际化 ………………………………………………………………… 48
3.1 案例5 怎样实现国际化 ………………………………………………………… 48
3.2 知识点 几种常见的国际化编程场景 …………………………………………… 52
3.3 知识点 中英文翻译失败如何处理 ……………………………………………… 54
3.4 配套练习 …………………………………………………………………………… 56
第4章 打基础 ……………………………………………………………………………… 57
4.1 案例6 开发一个 DLL …………………………………………………………… 57
4.2 知识点 使用命名空间 …………………………………………………………… 61
4.3 案例7 QString的6个实用案例 ………………………………………………… 64
4.4 案例8 用qDebug()输出信息 …………………………………………………… 69
4.5 案例9 使用 QVector处理数组 ………………………………………………… 73
4.6 案例10 使用 QList处理链表 …………………………………………………… 79
4.7 案例11 使用 QMap建立映射 …………………………………………………… 83
4.8 案例12 万能的 QVariant ……………………………………………………… 87
4.9 案例13 使用 QMessagebox弹出各种等级的提示信息………………………… 89
4.10 案例14 使用 QInputDialog获取多种类型的用户输入 ……………………… 92
4.11 知识点 开发自己的公共类库 …………………………………………………… 96
4.12 案例15 普通文本文件读写 …………………………………………………… 99
4.13 案例16 XML格式的配置文件 ……………………………………………… 104
4.14 知识点 INI格式的配置文件…………………………………………………… 109
4.15 案例17 把类对象序列化到二进制文件 ……………………………………… 112
4.16 案例18 从二进制文件反序列化类对象 ……………………………………… 117
4.17 案例19 类的 XML格式序列化 ……………………………………………… 121
4.18 知识点 类的二进制格式序列化———向后兼容 ……………………………… 126
4.19 案例20 使用流方式读写 XML ……………………………………………… 135
4.20 知识点 使用单体模式实现全局配置 ………………………………………… 142
4.21 案例21 读取 GB13000编码的身份证信息 ………………………………… 145
4.22 配套练习 ………………………………………………………………………… 149
第5章 对话框……………………………………………………………………………… 150
5.1 知识点 QtDesigner的使用 …………………………………………………… 150
5.2 知识点 在 Designer中进行界面布局…………………………………………… 156
5.3 案例22 对话框———走起 ……………………………………………………… 160
5.4 案例23 三种编程方式实现信号-槽开发 ……………………………………… 166
5.5 案例24 自定义signal与信号转发 …………………………………………… 170
5.6 案例25 disconnect的用途 ……………………………………………………… 172
5.7 知识点 消息阻塞-防止额外触发槽函数 ……………………………………… 174
5.8 案例26 信号-槽只能用在对话框里吗 ………………………………………… 177
5.9 案例27 对象之间还能怎么传递消息 ………………………………………… 178
5.10 知识点 编程实现控件嵌套布局 ……………………………………………… 180
5.11 知识点 样式 …………………………………………………………………… 182
5.12 案例28 使用 QStackedLayout实现向导界面 ……………………………… 188
5.13 案例29 定时器1 ……………………………………………………………… 192
5.14 案例30 定时器2 ……………………………………………………………… 196
5.15 配套练习 ………………………………………………………………………… 199
第6章 常用控件 ………………………………………………………………………… 200
6.1 案例31 使用 QLabel显示文本或图片 ………………………………………… 200
6.2 案例32 使用 QLineEdit获取多种输入………………………………………… 203
6.3 案例33 使用 QComboBox获取用户输入……………………………………… 207
6.4 案例34 使用 QListWidget展示数据列表 …………………………………… 209
6.5 案例35 使用 QSlider控制进度 ………………………………………………… 213
6.6 配套练习 …………………………………………………………………………… 217
第7章 用 QPainter实现自定义绘制 ………………………………………………… 219
7.1 知识点 怎样进行自定义绘制 …………………………………………………… 219
7.2 案例36 萌新机器人 …………………………………………………………… 222
7.3 案例37 机器人的新装 ………………………………………………………… 226
7.4 配套练习 …………………………………………………………………………… 228
第8章 模型视图代理 …………………………………………………………………… 229
8.1 知识点 Qt的 MVC简介………………………………………………………… 229
8.2 知识点 使用 QStandardItemModel构建树模型 ……………………………… 232
8.3 案例38 使用代理实现属性窗 ………………………………………………… 237
8.4 案例39 带子属性的属性窗 …………………………………………………… 250
8.5 配套练习 …………………………………………………………………………… 261
第9章 开发SDI应用 …………………………………………………………………… 262
9.1 案例40 开发一个SDI应用 …………………………………………………… 262
9.2 案例41 使用自定义视图 ……………………………………………………… 263
9.3 案例42 添加主菜单 …………………………………………………………… 264
9.4 案例43 常规工具条 …………………………………………………………… 267
9.5 知识点 在状态栏上显示鼠标坐标 ……………………………………………… 269
9.6 知识点 使用 QSplashScreen为程序添加启动画面 …………………………… 271
9.7 知识点 工具条反显 ……………………………………………………………… 274
9.8 案例44 打开文件对话框 ……………………………………………………… 276
9.9 案例45 浮动窗里的列表框 …………………………………………………… 278
9.10 案例46 拖放 …………………………………………………………………… 279
9.11 案例47 使用树视图做个工具箱 ……………………………………………… 284
9.12 案例48 使用事项窗展示事项或日志 ………………………………………… 288
9.13 案例49 剪切、复制、粘贴 ……………………………………………………… 294
9.14 案例50 上下文菜单 …………………………………………………………… 299
9.15 案例51 利用属性机制实现动画弹出菜单 …………………………………… 301
9.16 知识点 main()函数一般都写什么 …………………………………………… 308
9.17 配套练习 ………………………………………………………………………… 310
第10章 开发 MDI应用 ………………………………………………………………… 311
10.1 案例52 MDI———采用同一类型的 View …………………………………… 311
10.2 知识点 MDI———采用不同类型的 View …………………………………… 322
10.3 配套练习 ………………………………………………………………………… 331
第11章 重写 Qt事件 …………………………………………………………………… 332
11.1 知识点 QWidget事件简介 …………………………………………………… 332
11.2 案例53 通过重写鼠标事件实现图元移动 ………………………………… 333
11.3 案例54 通过重写键盘事件实现图元移动 ………………………………… 337
11.4 知识点 无法切换到中文输入时该怎么办 …………………………………… 338
11.5 配套练习 ………………………………………………………………………… 339
第12章 开发插件 ………………………………………………………………………… 340
12.1 知识点 什么是插件,插件用来干什么 ……………………………………… 340
12.2 案例55 怎样开发插件 ……………………………………………………… 341
12.3 配套练习 ………………………………………………………………………… 347
第13章 开发多线程应用 ……………………………………………………………… 348
13.1 案例56 多线程和互斥锁 …………………………………………………… 348
13.2 知识点 多线程应用中如何与主界面通信 …………………………………… 354
13.3 案例57 使用 QtConcurrent处理并发———Map模式 ……………………… 356
13.4 案例58 使用 QtConcurrent处理并发———MapReduce模式 ……………… 360
13.5 配套练习 ………………………………………………………………………… 364
第14章 开发网络应用…………………………………………………………………… 365
14.1 案例59 基于 Qt的 TCP/IP编程 …………………………………………… 365
14.2 案例60 TCP/IP多客户端编程 ……………………………………………… 373
14.3 配套练习 ………………………………………………………………………… 388
第15章 PyQt5基础……………………………………………………………………… 389
15.1 知识点 PyQt5简介 ………………………………………………………… 389
15.2 知识点 搭建 PyQt5开发环境 ……………………………………………… 393
15.3 案例61 编写第一个 PyQt5程序 …………………………………………… 397
15.4 案例62 给应用加上图片 …………………………………………………… 400
15.5 案例63 信号-槽初探———窗口 A 调用窗口 B ……………………………… 404
15.6 案例64 编写代码实现控件布局 …………………………………………… 406
15.7 案例65 在窗体 A 中嵌入自定义控件 B …………………………………… 411
15.8 案例66 使用 QLabel显示 GIF动画………………………………………… 413
15.9 案例67 使用 QLineEdit获取多种输入 …………………………………… 414
15.10 案例68 使用 QComboBox获取用户输入 ………………………………… 417
15.11 案例69 使用 QListWidget展示并操作列表 ……………………………… 420
15.12 案例70 使用 QSlider控制进度 …………………………………………… 423
15.13 案例71 使用 QMessagebox弹出提示信息 ……………………………… 427
15.14 案例72 使用 QInputDialog获取用户输入 ………………………………… 430
15.15 案例73 使用 QFileDialog获取用户选择的文件名 ……………………… 434
15.16 知识点 把程序最小化到系统托盘 ………………………………………… 435
15.17 配套练习 ……………………………………………………………………… 438
第16章 PyQt5进程内通信 …………………………………………………………… 439
16.1 知识点 PyQt5中的信号-槽 ………………………………………………… 439
16.2 案例74 使用自定义信号 …………………………………………………… 441
16.3 案例75 带参数的自定义信号 ……………………………………………… 443
16.4 知识点 信号比槽的参数少该怎么办 ………………………………………… 446
16.5 案例76 使用 QTimer实现定时器 ………………………………………… 448
16.6 知识点 使用timerEvent()实现定时器 ……………………………………… 450
16.7 案例77 使用 QStackedLayout实现向导界面 ……………………………… 452
16.8 配套练习 ………………………………………………………………………… 456
第17章 PyQt5实现自定义绘制 ……………………………………………………… 457
17.1 知识点 怎样进行自定义绘制 ………………………………………………… 457
17.2 案例78 萌新机器人 ………………………………………………………… 460
17.3 案例79 机器人的新装 ……………………………………………………… 464
17.4 配套练习 ………………………………………………………………………… 466
第18章 PyQt5中的模型视图代理 …………………………………………………… 467
18.1 知识点 使用 QStandardItemModel构建树模型 …………………………… 467
18.2 案例80 最简单的属性窗 …………………………………………………… 470
18.3 案例81 使用代理实现属性窗 ……………………………………………… 472
18.4 案例82 自定义属性窗 ……………………………………………………… 474
18.5 案例83 带子属性的属性窗 ………………………………………………… 481
18.6 配套练习 ………………………………………………………………………… 489
第19章 PyQt5开发SDI应用 ………………………………………………………… 490
19.1 案例84 开发一个SDI应用 ………………………………………………… 490
19.2 案例85 使用自定义视图 …………………………………………………… 491
19.3 案例86 添加主菜单 ………………………………………………………… 492
19.4 案例87 常规工具条 ………………………………………………………… 495
19.5 案例88 在状态栏上显示鼠标坐标 ………………………………………… 497
19.6 知识点 使用 QSplashScreen为程序添加启动画面 ………………………… 499
19.7 知识点 工具条反显 …………………………………………………………… 502
19.8 案例89 浮动窗里的列表框 ………………………………………………… 503
19.9 案例90 拖放 ………………………………………………………………… 505
19.10 案例91 使用树视图做个工具箱 …………………………………………… 510
19.11 案例92 使用事项窗展示事项或日志 ……………………………………… 513
19.12 案例93 剪切、复制、粘贴 …………………………………………………… 518
19.13 案例94 上下文菜单 ………………………………………………………… 523
19.14 配套练习 ……………………………………………………………………… 524
第20章 PyQt5开发 MDI应用 ……………………………………………………… 525
20.1 案例95 MDI———采用同一类型的 View …………………………………… 525
20.2 知识点 MDI———采用不同类型的 View …………………………………… 534
20.3 配套练习 ………………………………………………………………………… 540
第21章 PyQt5事件……………………………………………………………………… 541
21.1 案例96 通过重写鼠标事件实现图元移动 ………………………………… 541
21.2 案例97 通过重写键盘事件实现图元移动 ………………………………… 544
21.3 配套练习 ………………………………………………………………………… 545
第22章 PyQt5开发多线程应用 ……………………………………………………… 546
22.1 案例98 多线程和互斥锁 …………………………………………………… 546
22.2 知识点 多线程应用中如何刷新主界面 ……………………………………… 550
22.3 配套练习 ………………………………………………………………………… 552
第23章 项目实战———敏捷看板(C++版)…………………………………………… 554
23.1 知识点 项目实战准备———访问SQLite数据库 …………………………… 554
23.2 知识点 项目实战准备———使用 QCustomPlot绘制曲线 ………………… 558
23.3 案例99 项目实战———敏捷看板 …………………………………………… 562
第24章 项目实战———敏捷看板(PyQt版)………………………………………… 573
24.1 知识点 项目实战准备———访问SQLite数据库 …………………………… 573
24.2 知识点 项目实战准备———用 Matplotlib绘制曲线 ………………………… 577
24.3 案例100 项目实战———敏捷看板 …………………………………………… 579
附录 A PyQt5常用类所在模块 ……………………………………………………… 592
-----------------------------------------------------------------