具体描述
内容简介
Qt平台体系与应用-Qt5.5+核心方法、技巧与案例
本书重点介绍了基于Qt开发体系结构中面向底层和顶层程序设计的项目研究结果,以一套集成软件层、硬件层、网络层、跨语言层和虚拟服务与虚拟设备层等完整应用程序的开发为例,对Qt平台的相关原理、方法与技巧进行说明。在底层方面,主要研究了Qt在桌面系统底层驱动程序开发的模块结构与特点,并以我国二代身份证读卡器及SIM卡读/写卡器为对象,给出系统设计、代码与实例。在顶层方面,重点研究了当前跨平台、跨语言、跨代码的远程程序通信协议,重点讲解了基于C++的Qt应用与基于Java语言的Web应用,其通过第三方远程通信协议进行跨语言级的函数调用,尤其重点介绍了允许二进制通信的Hessian远程通信协议,并给出了相应的解析实例。此外本书还介绍了Qt主要的高级功能模块,包括界面设计、Web网站文件的上传与下载、应用实例检测、外部动态链接库调用、系统托盘管理、网络连接状态的查看、外部进程的执行、进程间通过Windows消息通信、INI与JSON格式文件的读/写、程序打包与发布等课题。
本书所有代码均基于Qt5.5.1平台,可供该领域的程序设计人员、工程开发与研究人员参考,也可供自然科学和工程技术领域中的相关人员参考。
目录
第1章 引 言…………………………………………………………………………………… 1
1.1 Qt框架的特色…………………………………………………………………………… 1
1.1.1 跨平台……………………………………………………………………………… 1
1.1.2 艺术级图形界面设计……………………………………………………………… 3
1.1.3 抽象化核心模块设计……………………………………………………………… 3
1.1.4 环境准备…………………………………………………………………………… 3
1.2 本书的特色……………………………………………………………………………… 5
1.2.1 完整准确的参考…………………………………………………………………… 6
1.2.2 系统深入的说明…………………………………………………………………… 6
1.2.3 实例演示:远程传输与控制系统…………………………………………………… 7
1.3 远程传输与控制系统的结构…………………………………………………………… 7
1.3.1 总体结构…………………………………………………………………………… 7
1.3.2 软件层……………………………………………………………………………… 7
1.3.3 硬件层……………………………………………………………………………… 9
1.3.4 网络层……………………………………………………………………………… 9
1.3.5 跨语言通信层……………………………………………………………………… 9
1.3.6 数据层……………………………………………………………………………… 10
1.3.7 远端控制层………………………………………………………………………… 10
1.3.8 打包与发布………………………………………………………………………… 10
第2章 软件层系统功能模块………………………………………………………………… 11
2.1 Qt项目………………………………………………………………………………… 11
2.1.1 Qt工程…………………………………………………………………………… 11
2.1.2 PRO文件………………………………………………………………………… 12
2.1.3 影子编译…………………………………………………………………………… 14
2.1.4 版本控制…………………………………………………………………………… 14
2.2 系统程序窗口…………………………………………………………………………… 14
2.2.1 对话框开发………………………………………………………………………… 14
2.2.2 资源管理…………………………………………………………………………… 16
2.2.2.1 图片与图标资源……………………………………………………………… 16
2.2.2.2 css样式表…………………………………………………………………… 17
2.3 登录系统………………………………………………………………………………… 18
2.3.1 按钮响应…………………………………………………………………………… 18
2.3.2 读/写组件值……………………………………………………………………… 19
2.4 托盘管理………………………………………………………………………………… 19
2.4.1 Windows系统托盘……………………………………………………………… 19
2.4.2 事件劫持…………………………………………………………………………… 20
2.4.3 菜单管理…………………………………………………………………………… 21
2.4.3.1 鼠标右键动作………………………………………………………………… 21
2.4.3.2 鼠标左键动作………………………………………………………………… 23
2.5 单实例管理……………………………………………………………………………… 24
2.5.1 进程与实例………………………………………………………………………… 24
2.5.2 单实例管理概述…………………………………………………………………… 25
2.6 再论对话框……………………………………………………………………………… 26
2.6.1 系统对话框………………………………………………………………………… 26
2.6.2 自定义对话框……………………………………………………………………… 27
第3章 Web网络服务模块…………………………………………………………………… 29
3.1 Qt网络模块…………………………………………………………………………… 29
3.1.1 网络模块类………………………………………………………………………… 29
3.1.2 QNetworkAccessManager类与QNetworkReply类…………………………… 29
3.2 下载升级文件…………………………………………………………………………… 30
3.2.1 信号与槽函数……………………………………………………………………… 30
3.2.2 功能模块与类……………………………………………………………………… 31
3.3 程序自动升级…………………………………………………………………………… 33
3.3.1 强制升级机制……………………………………………………………………… 33
3.3.2 系统实现…………………………………………………………………………… 34
3.3.2.1 读取INI文件中的版本信息…………………………………………………… 34
3.3.2.2 设计本地信息INI文件………………………………………………………… 34
3.3.2.3 读写MyDocuments目录下的INI文件………………………………………… 35
3.3.2.4 逻辑判断……………………………………………………………………… 36
3.3.2.5 开始下载……………………………………………………………………… 37
3.3.2.6 启动进程外EXE文件完成升级………………………………………………… 39
第4章 通用跨语言层远程网络通信………………………………………………………… 40
4.1 远程调用与通信………………………………………………………………………… 40
4.1.1 进程间通信………………………………………………………………………… 40
4.1.2 网络间通信………………………………………………………………………… 41
4.1.2.1 通信协议……………………………………………………………………… 41
4.1.2.2 通信程序与语言……………………………………………………………… 42
4.1.3 跨语言通信………………………………………………………………………… 48
4.1.3.1 可执行程序层跨语言通信……………………………………………………… 48
4.1.3.2 链接库层跨语言通信………………………………………………………… 49
4.1.3.3 代码层跨语言通信…………………………………………………………… 53
4.2 代码层跨语言通信协议………………………………………………………………… 53
4.2.1 JavaRMI ………………………………………………………………………… 53
2 Qt平台体系与应用———Qt5.5+核心方法、技巧与案例
4.2.2 WebService ……………………………………………………………………… 54
4.2.2.1 WebService功能实现………………………………………………………… 54
4.2.2.2 WebService功能描述………………………………………………………… 55
4.2.2.3 WebService远程调用………………………………………………………… 55
4.2.3 Hessian协议……………………………………………………………………… 58
4.2.3.1 Hessian协议介绍……………………………………………………………… 58
4.2.3.2 代码实现……………………………………………………………………… 59
4.3 Qt中的Hessian协议………………………………………………………………… 60
4.3.1 Hessian的C语言实现…………………………………………………………… 60
4.3.1.1 官方实现……………………………………………………………………… 60
4.3.1.2 第三方实现…………………………………………………………………… 61
4.3.1.3 Qt实现……………………………………………………………………… 62
4.3.2 qhessian的远程过程调用………………………………………………………… 63
4.3.2.1 qhessian包的结构…………………………………………………………… 63
4.3.2.2 通信原理与代码实现………………………………………………………… 66
4.4 远程传输与控制系统实例解析………………………………………………………… 69
4.4.1 总体需求分析……………………………………………………………………… 69
4.4.2 服务器端业务需求与功能模块…………………………………………………… 70
4.4.2.1 功能模块与接口……………………………………………………………… 70
4.4.2.2 数据层支持…………………………………………………………………… 71
4.4.3 客户端业务需求与功能模块……………………………………………………… 71
4.4.3.1 客户端引入qhessian模块……………………………………………………… 71
4.4.3.2 客户端实现…………………………………………………………………… 73
4.4.3.3 主程序接口调用……………………………………………………………… 75
4.4.4 编译与调试………………………………………………………………………… 76
4.4.4.1 配置文件……………………………………………………………………… 76
4.4.4.2 服务器与客户端……………………………………………………………… 76
第5章 硬件模块与底层驱动………………………………………………………………… 78
5.1 Qt引入硬件层………………………………………………………………………… 78
5.1.1 动态链接库………………………………………………………………………… 79
5.1.2 Qt程序静态加载动态链接库…………………………………………………… 79
5.1.2.1 Linux平台…………………………………………………………………… 80
5.1.2.2 Windows平台………………………………………………………………… 80
5.1.2.3 代码实现……………………………………………………………………… 81
5.1.3 Qt程序动态加载动态链接库…………………………………………………… 85
5.1.4 Qt程序加载非完整动态链接库………………………………………………… 86
5.2 二代身份证读卡器……………………………………………………………………… 90
5.2.1 功能描述…………………………………………………………………………… 90
5.2.1.1 二代身份证…………………………………………………………………… 90
5.2.1.2 二代身份证读卡器…………………………………………………………… 91
5.2.2 驱动接口…………………………………………………………………………… 92
5.2.2.1 公安部标准接口……………………………………………………………… 92
5.2.2.2 C语言实现…………………………………………………………………… 93
5.2.3 Qt调用…………………………………………………………………………… 96
5.2.3.1 读取身份证信息……………………………………………………………… 96
5.2.3.2 身份证信息的原始格式……………………………………………………… 101
5.2.3.3 身份证照片与指纹信息……………………………………………………… 104
5.2.3.4 Hessian上传身份证信息……………………………………………………… 105
5.2.4 兼容性…………………………………………………………………………… 113
5.3 SIM 卡读/写卡器…………………………………………………………………… 114
5.3.1 SIM 卡…………………………………………………………………………… 114
5.3.2 SIM 卡开发……………………………………………………………………… 115
5.3.2.1 ISO7816 …………………………………………………………………… 116
5.3.2.2 GSM11.11 ………………………………………………………………… 117
5.3.2.3 GSM11.14 ………………………………………………………………… 117
5.3.2.4 APDU 指令集……………………………………………………………… 118
5.3.2.5 Winscard封装……………………………………………………………… 122
5.3.3 实际系统开发…………………………………………………………………… 124
5.3.3.1 联通SIM 卡………………………………………………………………… 124
5.3.3.2 移动SIM 卡………………………………………………………………… 126
5.3.4 Qt实现SIM 卡的读/写操作…………………………………………………… 128
5.3.4.1 功能需求与程序架构………………………………………………………… 128
5.3.4.2 读/写SIM 卡………………………………………………………………… 128
5.4 其他硬件设备………………………………………………………………………… 136
5.4.1 指纹识别设备…………………………………………………………………… 136
5.4.2 短信业务模块设备……………………………………………………………… 136
第6章 Qt关键模块与高级功能…………………………………………………………… 137
6.1 Qt最优语言特色:再论信号与槽…………………………………………………… 137
6.1.1 信号与槽原理…………………………………………………………………… 137
6.1.1.1 Windows传统消息机制……………………………………………………… 137
6.1.1.2 Qt机制……………………………………………………………………… 139
6.1.2 示例程序………………………………………………………………………… 140
6.1.2.1 定义信号与槽……………………………………………………………… 140
6.1.2.2 创建信号与槽函数…………………………………………………………… 141
6.1.2.3 连接并使用信号与槽………………………………………………………… 142
6.2 Qt事件处理…………………………………………………………………………… 143
6.2.1 事件处理机制…………………………………………………………………… 143
6.2.2 高级事件响应…………………………………………………………………… 146
4 Qt平台体系与应用———Qt5.5+核心方法、技巧与案例
6.2.2.1 自主推动事件循环…………………………………………………………… 146
6.2.2.2 与Windows程序消息通信…………………………………………………… 146
6.3 系统关键功能………………………………………………………………………… 148
6.3.1 查看网络是否连接……………………………………………………………… 148
6.3.2 识别操作系统位数……………………………………………………………… 150
6.3.3 查看系统目录…………………………………………………………………… 150
6.3.3.1 获取Windows系统目录……………………………………………………… 150
6.3.3.2 获取应用程序所在目录……………………………………………………… 151
6.3.4 防止程序自动退出……………………………………………………………… 152
6.3.5 执行外部进程…………………………………………………………………… 152
6.3.5.1 启动第三方进程……………………………………………………………… 152
6.3.5.2 停止第三方进程……………………………………………………………… 153
6.3.5.3 后台方式启动第三方进程…………………………………………………… 154
6.3.5.4 指定输出方式启动第三方进程……………………………………………… 154
6.3.5.5 启动第三方BAT程序……………………………………………………… 154
6.4 服务模块……………………………………………………………………………… 155
6.4.1 INI文件操作…………………………………………………………………… 155
6.4.2 JSON 文件操作………………………………………………………………… 156
6.4.2.1 简单格式的JSON串………………………………………………………… 156
6.4.2.2 复杂格式的JSON串………………………………………………………… 157
6.4.3 XML文件操作………………………………………………………………… 158
6.4.4 二进制数据处理………………………………………………………………… 160
6.4.4.1 base64码…………………………………………………………………… 160
6.4.4.2 文本化处理………………………………………………………………… 160
6.4.5 Qt日志…………………………………………………………………………… 161
第7章 程序打包与发布……………………………………………………………………… 163
7.1 发布Qt程序………………………………………………………………………… 163
7.1.1 Release与Debug编译………………………………………………………… 163
7.1.2 动态链接库依赖………………………………………………………………… 163
7.2 打包程序……………………………………………………………………………… 165
7.2.1 InstallShield打包……………………………………………………………… 166
7.2.1.1 创建基本的安装包…………………………………………………………… 166
7.2.1.2 卸载功能…………………………………………………………………… 166
7.2.1.3 安装第三方包与安装后重启………………………………………………… 166
7.2.2 inno打包………………………………………………………………………… 168
7.2.2.1 基本功能…………………………………………………………………… 168
7.2.2.2 高级功能…………………………………………………………………… 170
参考文献………………………………………………………………………………………… 176
《Qt平台体系与应用——Qt5.5+核心方法、技巧与案例》一书,旨在为读者提供一个全面、深入、实用的Qt开发指南。本书并非简单罗列API,而是着力于解析Qt平台的内在机制、核心设计理念以及在实际开发中行之有效的解决策略。通过大量的代码示例、详尽的原理讲解和贴近实际的案例分析,帮助读者掌握Qt 5.5及以后版本的重要特性,构建健壮、高效、可维护的应用程序。 一、 Qt核心体系深度剖析:理解“为什么”与“怎么样” 本书的首要目标是让读者真正理解Qt的“魂”。我们将从Qt的核心体系结构入手,深入解析其背后精妙的设计。 Qt对象模型(Qt Object Model): 这是Qt最基础也是最重要的特性之一。我们将详细阐述信号与槽(Signals and Slots)的实现原理,包括信号的发布、槽的连接、连接的类型(Qt::AutoConnection, Qt::DirectConnection, Qt::QueuedConnection, Qt::BlockingQueuedConnection)及其在多线程环境下的行为差异。理解元对象系统(Meta-Object System)是掌握信号与槽的关键,我们将剖析Q_OBJECT宏的作用,moc(Meta-Object Compiler)的工作流程,以及属性(Properties)、方法(Methods)、枚举(Enums)等如何在运行时动态访问。这将帮助开发者写出更灵活、更易于扩展的代码。 Qt事件处理机制(Qt Event Handling): 应用程序的交互性很大程度上依赖于事件处理。本书将详细讲解Qt的事件循环(Event Loop)和事件分发机制。从低层输入事件(如鼠标、键盘)到高层应用事件(如定时器事件、绘制事件),我们将逐步揭示事件如何在Qt对象之间传递和处理。特别地,我们会重点介绍事件过滤(Event Filtering)技术,以及如何通过重写`QObject::event()`和`QCoreApplication::notify()`来实现自定义的事件处理逻辑,这对于构建复杂的UI交互或实现特定功能至关重要。 Qt内存管理与资源控制: Qt采用了一种称为“父子关系”的对象树(Object Tree)机制来管理内存。我们将深入探讨这一机制的工作原理,解释当父对象被销毁时,其子对象是如何自动释放的。同时,也会讨论在某些特定场景下,手动管理内存的必要性,以及如何避免内存泄漏。此外,还会涉及Qt的字符串(QString)、容器(QVector, QList, QMap等)的内存开销和性能优化技巧。 Qt跨平台能力解析: Qt的强大之处在于其跨平台特性。本书将阐释Qt是如何屏蔽底层操作系统的差异的,例如通过抽象层(Abstraction Layer)来处理文件系统、网络通信、图形绘制等。我们将分析Qt的平台无关API设计,以及在特定情况下如何编写平台相关的代码,从而在保持跨平台性的同时,又能充分利用特定平台的原生功能。 二、 Qt 5.5+核心技术深入探讨:掌握现代Qt开发 本书紧跟Qt 5.5及以后版本的发展,重点讲解其中引入和改进的关键技术,帮助读者构建现代化、高性能的应用程序。 Qt Quick与QML: 这是Qt 5.x以来最重要的革新之一。我们将从QML(Qt Meta-Object Language)的基本语法、核心元素(Item, Rectangle, Text, Image等)讲起,逐步深入到JavaScript集成、属性绑定(Property Binding)、状态(States)、动画(Animations)和过渡(Transitions)的实现。 QML与C++的交互: 掌握QML和C++之间的无缝交互是构建混合应用的关键。本书将详细讲解如何将C++对象暴露给QML,如何从QML调用C++方法,以及如何利用信号与槽在两者之间传递数据。 Qt Quick Controls 2: 针对移动和嵌入式设备优化的Qt Quick Controls 2将是重点讲解内容。我们将介绍其扁平化设计、高效渲染以及如何根据不同平台进行定制,助力开发者构建美观且响应迅速的用户界面。 性能优化: QML的性能调优是大型项目中的重要环节。我们将探讨如何通过合理使用属性绑定、延迟加载、异步操作等技术来提升QML应用的性能。 Qt Widgets模块的持续演进: 尽管Qt Quick备受瞩目,但Qt Widgets仍然是桌面应用开发的主流。本书将回顾Qt Widgets的核心组件,如`QWidget`、`QMainWindow`、`QDialog`等,并重点关注Qt 5.5+在这一模块的改进,例如新控件的加入、样式(Styling)和主题(Theming)的增强,以及与Qt Quick的集成策略。 Qt 3D: 随着3D图形在游戏、模拟、可视化等领域的广泛应用,Qt 3D模块应运而生。本书将介绍Qt 3D的核心概念,如实体(Entity)、组件(Component)、场景图(Scene Graph)等,并演示如何使用Qt 3D创建和渲染3D模型,实现基本的3D交互。 Qt Multimedia: 掌握多媒体处理能力对于开发富媒体应用至关重要。本书将深入讲解Qt Multimedia模块,包括音频播放、视频播放、摄像头捕获、图像处理等,并提供实际的开发案例。 Qt Network: 现代应用离不开网络通信。我们将详细介绍Qt Network模块,包括HTTP、TCP、UDP通信,套接字编程(Socket Programming),以及SSL/TLS安全连接的实现。 三、 实战技巧与解决方案:学以致用,解决开发痛点 理论与实践相结合是本书的核心理念。我们将分享大量在实际开发中遇到的问题及其解决方案。 高效的UI设计与布局: 除了QML,对于Widgets应用,我们也将深入讲解各种布局管理器(QVBoxLayout, QHBoxLayout, QGridLayout, QFormLayout)的使用技巧,以及如何通过样式表(Style Sheets)和自定义控件来实现高度定制化的界面。 数据库访问: Qt提供了强大的Qt SQL模块,用于与各种数据库进行交互。本书将详细介绍数据库连接、SQL语句执行、模型/视图(Model/View)编程等,并提供常见数据库(如SQLite, MySQL, PostgreSQL)的集成示例。 多线程与并发编程: 在GUI应用中,进行耗时操作时,避免阻塞主线程至关重要。本书将深入讲解Qt的多线程(QThread)和线程池(QThreadPool)机制,以及如何安全地在不同线程之间传递数据,例如使用信号与槽进行线程间通信,以及使用信号量、互斥锁等同步机制。 国际化与本地化(i18n & l10n): 编写能够适应不同语言和地区的应用是现代软件开发的必备技能。我们将详细讲解Qt的国际化工具(`lupdate`, `lrelease`)和本地化流程,以及如何在代码中加载和使用翻译文件。 性能分析与优化: 应用程序的性能直接影响用户体验。本书将介绍Qt提供的性能分析工具(如Qt Creator的CPU Profiler, Memory Analyzer),并分享针对常见性能瓶颈的优化策略,例如内存管理优化、算法优化、UI渲染优化等。 调试与测试: 掌握有效的调试技巧是保证软件质量的关键。我们将介绍Qt Creator的强大调试功能,以及编写单元测试(Unit Testing)和集成测试(Integration Testing)的重要性,并展示如何使用Qt Test模块进行自动化测试。 版本控制与项目管理: 虽然不是Qt本身的内容,但良好的版本控制(如Git)和项目管理习惯对于任何软件开发项目都至关重要。本书会适当提及这些最佳实践。 四、 经典案例分析:融会贯通,举一反三 本书将通过一系列精心设计的案例,将上述理论和技巧融会贯通。这些案例将覆盖不同类型的应用场景,例如: 桌面工具类应用: 如文件管理器、文本编辑器、图像查看器等,演示Widgets模块的强大功能。 数据可视化应用: 利用Qt Charts模块,展示如何创建各种图表,实现数据的直观展示。 网络通信应用: 如简单的客户端/服务器程序、即时通讯工具,演示Qt Network模块的应用。 多媒体播放器: 结合Qt Multimedia模块,构建功能完备的音视频播放器。 嵌入式设备UI: 利用Qt Quick和QML,设计和开发适用于嵌入式设备的交互界面。 集成第三方库: 演示如何将外部C/C++库集成到Qt项目中。 本书的编写风格将力求清晰、严谨、易懂,并注重实用性。我们相信,通过本书的学习,读者不仅能够熟练掌握Qt 5.5+的开发技术,更能深刻理解Qt的设计哲学,从而在未来的软件开发道路上,能够独立解决复杂问题,创造出更多优秀的作品。