为什么写这套系列
Qt 入门资料并不少,但很多内容停留在"控件怎么用""信号槽怎么连"。当程序真正运行到 ARM Linux 开发板以后,开发者会立刻遇到另一批问题:交叉编译器、Sysroot、动态库、EGLFS、串口半包、TCP 重连、线程退出、数据库膨胀、Core Dump、systemd、长期运行。
这些问题彼此并不独立。一个客户现场的"界面卡死",可能来自主线程同步 I/O;一个"设备离线",可能来自 USB 驱动重新枚举;一个"程序运行三天退出",可能是曲线容器无限增长;一个"升级后无法启动",可能是 Qt 平台插件依赖了错误版本的 GPU 用户态库。
因此,本系列不把 Qt 嵌入式理解成一组 API,而把它当成一条完整工程链:
text
需求
→ 架构
→ Qt应用
→ 线程/事件循环
→ 通信协议
→ Linux用户态
→ 驱动/硬件
→ 构建
→ 部署
→ 运行监控
→ 故障诊断
→ 升级发布
读者对象
适合:
- 已有一点 C++ 基础,准备学习 Qt 的开发者。
- 会 QWidget/QML,但主要做 Windows 桌面开发,希望转 ARM Linux。
- 工业控制、仪器仪表、设备上位机开发者。
- 需要维护 Qt 5.15.2/qmake 老项目的工程师。
- 想系统补齐 Linux、交叉编译、多线程和现场调试能力的开发者。
不要求读者一开始就懂 Linux Driver、Yocto、DRM。系列采用"应用工程师视角"逐步向系统层深入。
本书统一技术栈
主线:
text
Qt 5.15.2
C++11/14/17(根据项目工具链)
qmake
QWidget 为主,兼顾 QML
Embedded Linux
ARM/ARM64
Windows/Linux 开发主机
具体芯片平台的 BSP/GPU/驱动差异较大,所以书中涉及 Qt configure、EGLFS、设备节点等内容时,强调"方法"和"验证",不会假设一条命令适用于所有开发板。
七个学习阶段
第一阶段:建立全局认知
第 1~4 章:
text
Qt嵌入式全景图
Linux基础
ARM/ABI
Sysroot
目标:知道一个 Qt ARM 程序从源码到 LCD 的完整路径。
第二阶段:构建环境
第 5~7 章:
text
Qt 5.15.2交叉编译
Qt Creator ARM Kit
qmake工程组织
目标:能独立建立可复现 ARM Qt 构建环境。
第三阶段:Qt 核心机制
第 8~13 章:
text
QObject生命周期
信号槽
事件循环
QTimer
QThread
锁与多线程
这是全书最重要的基础部分。大量"卡顿、崩溃、退出卡死、槽不执行"都来自这里。
第四阶段:通信和硬件
第 14~20 章:
text
串口
TCP Client/Server
UDP
CAN
GPIO/I2C/SPI
USB/libusb
重点不是"会调用 API",而是拆包、状态机、超时、重试、热插拔和异常恢复。
第五阶段:应用基础设施
第 21~26 章:
text
配置
日志
SQLite
QWidget
QML
EGLFS/LinuxFB/Wayland/XCB
目标:把业务软件从"能跑"提升到"可维护"。
第六阶段:产品稳定性
第 27~32 章:
text
部署
systemd
性能
长期稳定性
Core Dump/GDB
远程调试
目标:具备客户现场问题定位能力。
第七阶段:工程交付
第 33~36 章:
text
架构
完整项目
发布检查
进阶路线
目标:把前面的知识形成一个产品闭环。
推荐阅读方式
不要连续"刷完"36 篇。每章应该完成:
text
读原理
→ 跑最小Demo
→ 制造错误
→ 看日志/命令
→ 修复
→ 写验证结论
真正有效的学习不是"看懂",而是能回答:
- 这个机制解决什么问题?
- 失败时会表现成什么?
- 我用什么证据确认?
- 最小修复在哪里?
- 怎么证明修复没有引入新的问题?
统一排障方法
全书推荐使用同一套思路:
text
现象
↓
复现条件
↓
日志/系统状态/调用栈/协议数据
↓
画调用链和数据链
↓
确定故障层级
↓
提出最小根因假设
↓
验证假设
↓
最小修复
↓
编译验证
↓
人工验证
↓
长期/异常回归
禁止"看到现象就猜原因"。
示例项目建议
建议读者创建一个贯穿全书的 EmbeddedMonitorDemo:
text
EmbeddedMonitorDemo/
├── app.pro
├── src/
├── modules/
│ ├── device/
│ ├── network/
│ ├── storage/
│ ├── config/
│ └── diagnostics/
├── ui/
├── resources/
├── tests/
└── deploy/
前期使用 Mock Device,学到串口以后替换真实串口,学到 TCP 后增加服务器,学到 SQLite 后保存历史,最终部署到 ARM Linux。
代码阅读约定
书中代码以"解释工程思想"为主。真实项目仍需要:
- 检查每个返回值。
- 加入错误码和日志。
- 明确线程归属。
- 避免在 UI 主线程做阻塞操作。
- 处理退出和异常路径。
不要把教学代码未经评估直接复制到生产系统。
关于"精通"
本书标题中的"精通"不是指记住 Qt 所有类,而是:
面对一块 ARM Linux 设备和一份真实产品需求,能够完成环境、构建、UI、协议、线程、存储、部署、调试和稳定性闭环;出现问题时能够基于证据定位,而不是依赖猜测。