本文为转载:原链接:C++ Qt学习路线一条龙!(桌面开发&嵌入式开发)
本文将从一个完整的C++ Qt开发学习角度出发(桌面开发和嵌入式Qt开发),详细解析所需掌握的各个技术栈,并分享求职过程中的关键策略。让你成为Qt开发大牛,从入门到精通,一步一步走完整个学习路线!
我们先来了解C++ Qt开发主要应用的几个热门领域:
网上一直流传说做Qt开发没有前途,其实这种说法是片面的,Qt 虽然经常被当做一个 GUI 库,用来开发图形界面应用程序,但这并不是 Qt 的全部;Qt 除了可以绘制漂亮的界面(包括控件、布局、交互),还包含很多其它功能,比如多线程、访问数据库、图像处理、音频视频处理、网络通信、文件操作等,这些 Qt 都已经内置了。
当然,如果把Qt当作自己技术栈的全部当然不够,但你以Qt为基础去扩展其他技术栈,比如OpenCV、OpenGL、音视频、Linux编程等,薪资天花板将轻松突破,月薪50K也不是没可能!
本文将从 两大方向 展开讲解:
每条路线均包含从基础语法到高级特性的完整技术栈,并结合现代 C++ 新特性与工程实践技巧,帮助你构建扎实的 Qt 开发能力。
以下是 Qt 桌面开发中所需掌握的核心技术栈,按模块分类并详细列出每个技术点的作用与典型应用场景。适合初学者构建知识体系,也适合进阶开发者查漏补缺。
适用于希望使用 Qt 在 Windows、Linux 或 macOS 上开发图形界面应用程序的开发者。
技术点 |
所属模块 |
作用与说明 |
典型应用场景 |
auto |
C++11 |
自动类型推导,简化复杂类型声明 |
遍历 STL 容器时自动识别迭代器类型 |
nullptr |
C++11 |
替代 NULL,提高空指针安全性 |
函数参数为指针时避免歧义 |
范围 for 循环 |
C++11 |
简化容器遍历语法 |
遍历 QList、QMap 等 Qt 容器 |
Lambda 表达式 |
C++11 |
匿名函数,用于信号连接或异步任务 |
connect() 中直接写槽逻辑 |
智能指针 |
C++11/14 |
自动内存管理,防止内存泄漏 |
封装资源类如文件句柄、网络连接 |
移动语义 |
C++11 |
提升临时对象性能 |
返回大对象时避免拷贝 |
constexpr |
C++11 |
编译期常量计算 |
构建编译期查找表或配置 |
std::tuple |
C++11 |
多值返回结构体替代 |
存储多个不同类型的结果 |
协程(C++20) |
C++20 |
异步编程模型 |
实现异步 HTTP 请求、数据流处理 |
技术点 |
所属模块 |
作用与说明 |
典型应用场景 |
QObject 与元对象系统 |
QObject |
Qt 对象模型核心,支持信号与槽机制 |
控件通信、事件驱动编程 |
Q_OBJECT 宏、moc |
QObject |
启用元对象功能,自动生成 moc 文件 |
自定义控件需继承 QObject 并加此宏 |
信号与槽机制 |
QObject |
Qt 的核心通信机制 |
控件间数据更新、状态同步 |
parent/child 机制 |
QObject |
自动内存管理,父对象销毁子对象 |
UI 组件嵌套管理 |
deleteLater() |
QObject |
延迟删除对象,避免跨线程释放问题 |
在非主线程中安全删除控件 |
QFile、QTextStream |
IO |
文件读写操作 |
日志记录、配置保存 |
QDataStream |
IO |
二进制序列化工具 |
数据持久化、网络传输 |
QDir/QFileInfo |
IO |
文件路径、属性访问 |
判断文件是否存在、获取修改时间 |
QDateTime、QDate、QTime |
Core |
时间日期处理 |
记录日志时间戳、定时任务 |
JSON 解析:QJsonDocument 等 |
Core |
支持 JSON 数据解析与生成 |
接口交互、配置文件读取 |
QList/QMap/QVector |
Core |
Qt 自带容器类,优化了 GUI 使用场景 |
存储界面元素、状态映射 |
qDebug/qWarning/qInfo |
Debug |
输出调试信息 |
开发阶段调试逻辑输出 |
QLoggingCategory |
Debug |
分类控制日志输出级别 |
生产环境关闭部分日志减少开销 |
QThread、QtConcurrent |
Thread |
多线程任务执行 |
图片加载、后台计算不阻塞 UI |
技术点 |
所属模块 |
作用与说明 |
典型应用场景 |
QWindow |
Gui |
底层窗口抽象类,用于无 QWidget 的场景 |
EGLFS、Wayland 下创建窗口 |
QScreen |
Gui |
获取屏幕信息(分辨率、DPI、可用区域) |
多屏显示适配、布局调整 |
QPlatformIntegration |
Gui |
平台适配接口,用于定制平台行为 |
自定义嵌入式平台渲染方式 |
QImage、QPixmap |
Gui |
图像数据表示与绘制 |
图像处理、图标显示 |
QPainter |
Gui |
2D 绘图引擎,支持抗锯齿、渐变等 |
自定义控件绘图、图表绘制 |
QPen、QBrush |
Gui |
设置画笔样式、填充颜色 |
绘图细节控制 |
QEvent、QMouseEvent |
Gui |
事件处理机制 |
实现鼠标拖拽、键盘快捷键 |
QFont、QFontMetrics |
Gui |
字体设置与文本尺寸计算 |
文本排版、UI 自适应 |
QTransform |
Gui |
图形变换矩阵(缩放、旋转) |
动画效果实现 |
技术点 |
所属模块 |
作用与说明 |
典型应用场景 |
QWidget |
Widgets |
所有控件基类 |
创建自定义控件 |
QLabel、QPushButton、QRadioButton |
Widgets |
基础 UI 控件 |
表单设计、按钮点击 |
QComboBox、QListWidget |
Widgets |
列表选择控件 |
下拉菜单、列表展示 |
QGroupBox、QFrame |
Widgets |
容器控件,组织 UI 结构 |
界面分组与美化 |
QHBoxLayout、QVBoxLayout |
Layout |
布局管理器,自动排列控件 |
自适应窗口大小变化 |
QGridLayout |
Layout |
网格布局,适合表单布局 |
登录界面、配置面板 |
QSpacerItem |
Layout |
布局占位符,控制控件间距 |
美化 UI 布局 |
自定义控件 |
Widgets |
继承 QWidget 或已有控件扩展功能 |
实现仪表盘、进度条等 |
QPropertyAnimation |
Animation |
属性动画,实现平滑过渡 |
按钮弹跳、页面切换动画 |
技术点 |
所属模块 |
作用与说明 |
典型应用场景 |
QThread |
Thread |
创建独立线程运行任务 |
长时间后台任务(如下载) |
moveToThread |
Thread |
将对象移动到指定线程 |
网络请求、数据库访问 |
QRunnable + QThreadPool |
Thread |
可复用线程池执行一次性任务 |
多个图片加载任务并发处理 |
QtConcurrent::run |
Concurrent |
高级封装,简化异步调用 |
快速启动后台任务 |
QFuture & QFutureWatcher |
Concurrent |
监听异步任务状态 |
显示任务进度条 |
QMutex、QWaitCondition |
Thread |
线程同步机制 |
多线程共享资源保护 |
QAtomicInt、QAtomicPointer |
Thread |
原子操作,线程安全 |
计数器、标志位设置 |
技术点 |
所属模块 |
作用与说明 |
典型应用场景 |
QFile |
IO |
文件打开、读写、复制 |
本地配置文件、日志写入 |
QTextStream |
IO |
文本格式读写,支持编码转换 |
UTF-8、GBK 文件读写 |
QDataStream |
IO |
二进制格式序列化/反序列化 |
保存用户数据、网络传输 |
QSettings |
IO |
本地配置保存 |
用户偏好设置、窗口位置记忆 |
QTemporaryFile |
IO |
创建临时文件,程序退出自动清理 |
缓存文件、中间结果存储 |
ZIP 支持(第三方) |
IO |
文件压缩解压 |
导出项目包、备份数据 |
技术点 |
所属模块 |
作用与说明 |
典型应用场景 |
QNetworkAccessManager |
Network |
发起 HTTP 请求 |
接口调用、REST API |
QTcpSocket / QTcpServer |
Network |
TCP 客户端/服务端通信 |
内部系统通信、远程控制 |
QUdpSocket |
Network |
UDP 通信 |
广播消息、实时数据传输 |
QWebSocket |
Network |
WebSocket 通信 |
实时聊天、推送通知 |
QSslSocket |
Network |
SSL/TLS 加密通信 |
安全登录、HTTPS 代理 |
QHostInfo |
Network |
DNS 查询 |
获取 IP 地址 |
QNetworkProxy |
Network |
设置代理服务器 |
穿透防火墙、测试环境模拟 |
技术点 |
所属模块 |
作用与说明 |
典型应用场景 |
QSqlDatabase |
Sql |
连接数据库(SQLite、MySQL、PostgreSQL) |
本地缓存、用户数据存储 |
QSqlQuery |
Sql |
执行 SQL 语句,支持参数绑定 |
数据增删改查 |
QSqlTableModel |
Sql |
数据库模型绑定视图 |
表格控件自动刷新 |
QSqlRelationalTableModel |
Sql |
支持外键关系映射 |
主从表数据绑定 |
ORM(可选) |
Sql |
使用第三方库如 QtOrm 实现对象关系映射 |
简化数据库操作 |
数据库连接池 |
Sql |
管理多个数据库连接 |
高并发场景下的数据库访问优化 |
技术点 |
所属模块 |
作用与说明 |
典型应用场景 |
QSoundEffect |
Multimedia |
播放短音频文件 |
按钮点击音效、提示音 |
QAudioOutput |
Multimedia |
音频播放组件 |
播放 MP3、WAV 文件 |
QMediaPlayer |
Multimedia |
视频播放器 |
播放 MP4、AVI 视频 |
QCamera |
Multimedia |
调用摄像头设备 |
视频采集、人脸识别 |
QMediaRecorder |
Multimedia |
录制视频或音频 |
视频录制功能实现 |
FFT 分析 |
Multimedia |
音频分析与可视化 |
音乐可视化、频谱显示 |
技术点 |
所属模块 |
作用与说明 |
典型应用场景 |
QWebEngineView |
WebEngine |
内嵌浏览器控件 |
展示网页内容、在线帮助文档 |
evaluateJavaScript |
WebEngine |
执行 JS 脚本 |
页面动态控制、数据提取 |
QWebEngineUrlRequestInterceptor |
WebEngine |
拦截网页请求 |
过滤广告、替换资源 |
QWebEngineCookieStore |
WebEngine |
管理 Cookie |
登录状态保持 |
WebRTC 支持 |
WebEngine |
音视频通话功能 |
实现实时视频会议功能 |
技术点 |
所属模块 |
作用与说明 |
典型应用场景 |
插件接口设计 |
Plugin |
使用纯虚类定义插件接口 |
插件框架设计 |
Q_PLUGIN_METADATA |
Plugin |
注册插件元数据 |
动态加载插件 |
QPluginLoader |
Plugin |
加载 DLL/Dylib 插件 |
实现热插拔机制 |
插件部署 |
Plugin |
构建插件目录结构 |
支持插件化架构 |
插件管理 |
Plugin |
实现插件注册中心 |
插件启用/禁用管理 |
技术点 |
所属模块 |
作用与说明 |
典型应用场景 |
tr() 函数 |
i18n |
实现 UI 翻译 |
多语言支持 |
lupdate 工具 |
i18n |
提取翻译字符串生成 .ts 文件 |
自动生成翻译模板 |
Linguist 工具 |
i18n |
编辑 .ts 文件并生成 .qm |
翻译人员使用 |
QTranslator |
i18n |
动态加载 .qm 文件 |
切换语言 |
语言包管理 |
i18n |
支持多语言切换、默认语言回退机制 |
国际市场产品发布 |
技术点 |
所属模块 |
作用与说明 |
典型应用场景 |
.pro 文件 |
Build |
使用 qmake 构建项目 |
Windows/Linux/macOS 通用构建 |
CMakeLists.txt |
Build |
使用 CMake 构建项目 |
更灵活跨平台项目构建 |
Makefile 自动生成 |
Build |
qmake 生成 Makefile |
Linux 下手动编译 |
debug/release 构建 |
Build |
构建不同版本 |
开发调试 vs 正式发布 |
跨平台构建 |
Build |
Windows/Linux/macOS 构建差异处理 |
多平台统一代码库 |
windeployqt/macdeployqt |
Deploy |
自动打包依赖库 |
发布桌面应用程序 |
技术点 |
所属模块 |
作用与说明 |
典型应用场景 |
Valgrind |
Debug |
内存泄漏检测(Linux) |
内存错误排查 |
Visual Leak Detector |
Debug |
内存泄漏检测(Windows) |
Win32 应用调试 |
Perf / VTune |
Debug |
CPU/GPU 性能分析 |
查找性能瓶颈 |
qDebug()、QLoggingCategory |
Debug |
输出调试信息 |
开发阶段调试逻辑输出 |
Qt Test 模块 |
Debug |
单元测试框架 |
自动化测试 |
GDB / LLDB |
Debug |
调试器 |
断点调试、变量查看 |
梳理嵌入式 Qt 开发所需掌握的技术栈,涵盖硬件交互、操作系统适配、Qt 配置、QML 使用、性能优化等核心模块,帮助你构建完整的嵌入式 Qt 全栈知识体系。
技术点 |
所属模块 |
作用与说明 |
典型应用场景 |
交叉编译环境搭建 |
系统配置 |
编译目标平台可执行程序 |
在 x86 PC 上编译 ARM 架构程序 |
Buildroot / Yocto |
系统配置 |
构建嵌入式 Linux 根文件系统 |
定制化嵌入式系统镜像 |
U-Boot 启动流程 |
Bootloader |
初始化硬件、加载内核 |
系统启动控制 |
内核编译与裁剪 |
OS |
配置设备驱动、启用功能模块 |
支持特定外设(如触摸屏) |
文件系统管理 |
OS |
搭建根文件系统(BusyBox) |
构建最小系统运行 Qt 应用 |
sysfs/procfs/devtmpfs |
OS |
访问设备节点、系统信息 |
控制 GPIO、读取 CPU 温度 |
systemd/init.d |
OS |
系统服务管理 |
设置开机启动 Qt 程序 |
技术点 |
所属模块 |
作用与说明 |
典型应用场景 |
GPIO 控制 |
外设驱动 |
控制引脚高低电平 |
控制 LED、按钮输入 |
I2C/SPI/UART |
外设驱动 |
串行通信协议 |
与传感器、显示屏通信 |
tslib 触摸校准库 |
外设驱动 |
提供触摸屏支持 |
工业 HMI 设备 |
DRM/KMS 显示管理 |
图形驱动 |
控制显示输出模式 |
多屏显示、分辨率设置 |
Framebuffer 访问 |
图形驱动 |
直接操作显存 |
自定义渲染器调试 |
用户空间驱动访问 |
驱动交互 |
通过 /dev 节点操作硬件 |
USB 设备识别、音频播放 |
技术点 |
所属模块 |
作用与说明 |
典型应用场景 |
EGLFS 插件 |
Qt 平台插件 |
基于 EGL 的无窗口系统渲染 |
Qt 应用直接渲染到 framebuffer |
QWS(Qt Window System) |
Qt 平台插件 |
Qt3 遗留窗口系统,适用于旧设备 |
简单嵌入式 UI 界面 |
OpenGLES 2.0/3.0 |
渲染引擎 |
GPU 加速绘图管线 |
实现高性能动画和界面 |
QPainter 渲染 |
Qt 绘图 |
CPU 渲染路径 |
低端设备或简单 UI |
Weston/Wayland |
窗口系统 |
替代 X11 的轻量级合成器 |
多窗口嵌入式应用 |
DRM/KMS 支持 |
显示接口 |
控制显示输出 |
双屏显示、GPU 输出控制 |
技术点 |
所属模块 |
作用与说明 |
典型应用场景 |
Qt 源码交叉编译 |
Qt 移植 |
编译适用于目标平台的 Qt 库 |
构建嵌入式 Qt SDK |
configure 参数配置 |
Qt 移植 |
设置交叉编译工具链、平台参数 |
指定 -xplatform 和 -device |
剪裁 Qt 模块 |
Qt 移植 |
减少不必要的模块依赖 |
减小最终镜像大小 |
静态链接 vs 动态链接 |
Qt 移植 |
选择打包方式 |
便于部署或节省内存 |
EGLFS 插件配置 |
Qt 平台 |
设置渲染后端 |
支持 GPU 加速 |
输入设备配置 |
Qt 平台 |
配置触摸屏、鼠标、键盘 |
支持多点触控手势 |
QT_QPA_PLATFORM=eglfs |
Qt 运行时 |
指定平台插件 |
强制使用 EGLFS 启动 |
技术点 |
所属模块 |
作用与说明 |
典型应用场景 |
QWidget 基础控件 |
Widgets |
快速实现传统 UI |
简单工业界面 |
QML + C++ 混合开发 |
QML |
高效构建动态界面 |
智能家居、仪表盘 |
qmlRegisterType |
QML |
注册 C++ 类型供 QML 使用 |
数据模型绑定 |
Q_INVOKABLE / Q_PROPERTY |
QML |
导出方法与属性 |
与 QML 交互 |
触摸事件处理 |
Input |
支持多点触控 |
手势识别、拖拽操作 |
QGestureRecognizer |
Input |
自定义手势识别 |
swipe、pinch、rotate |
QTimer 替代 sleep() |
Core |
避免阻塞主线程 |
实现低功耗轮询机制 |
动画与状态机 |
Animation |
提升用户体验 |
页面切换、按钮反馈 |
技术点 |
所属模块 |
作用与说明 |
典型应用场景 |
内存占用优化 |
Resource |
减少缓存、释放闲置资源 |
小内存设备上运行 |
静态链接减少依赖 |
Build |
减少运行时依赖项 |
更易部署到裸板设备 |
背光控制 |
Power |
控制屏幕背光亮度 |
降低功耗、延长电池寿命 |
休眠唤醒机制 |
Power |
支持系统挂起与恢复 |
智能手表、手持设备 |
文件系统压缩 |
Storage |
使用 SquashFS 或 OverlayFS |
减少 Flash 写入损耗 |
日志分级输出 |
Debug |
控制日志级别 |
生产环境减少 IO 操作 |
技术点 |
所属模块 |
作用与说明 |
典型应用场景 |
串口打印 qDebug 输出 |
Debug |
查看 Qt 日志 |
无显示器调试 |
GDB + gdbserver |
Debug |
远程调试嵌入式程序 |
定位崩溃、死锁问题 |
strace/ltrace |
Debug |
跟踪系统调用 |
分析卡顿原因 |
perf 工具 |
Debug |
性能分析 |
查找 CPU 占用热点 |
macdeployqt/windeployqt |
Deploy |
自动复制依赖库 |
打包嵌入式 Qt 应用 |
AppImage / Flatpak |
Deploy |
跨平台部署方案 |
一次性打包发布 |
项目类型 |
技术栈重点 |
推荐方向 |
工业人机界面(HMI) |
QML + C++、EGLFS、触摸控制、数据可视化 |
仪表盘、报警提示、工艺流程监控 |
智能家居控制面板 |
MQTT、QML、本地存储、夜间模式 |
控制家电、离线缓存、远程同步 |
医疗仪器界面 |
波形绘制、SQLite、USB 存储、权限管理 |
心率监测、数据导出 PDF/CSV |
教育类电子白板 |
手写识别、笔迹平滑、双缓冲绘图 |
教学演示、儿童教育产品 |
自动售货机 UI |
有限状态机、二维码识别、支付集成 |
商业终端设备界面开发 |
模块 |
主要技术 |
嵌入式系统基础 |
交叉编译、Buildroot/Yocto、U-Boot、内核裁剪、文件系统 |
硬件交互 |
GPIO、I2C、SPI、UART、tslib、Framebuffer |
图形系统 |
EGLFS、QWS、OpenGLES、Wayland、DRM/KMS |
Qt 移植 |
Qt 源码交叉编译、configure 参数、平台插件配置 |
GUI 开发 |
QWidget、QML、自定义控件、动画、手势识别 |
资源管理 |
内存优化、静态链接、背光控制、低功耗策略 |
调试部署 |
串口调试、GDB、strace、perf、自动部署工具 |
项目实践 |
工业 HMI、智能家居、医疗仪器、教学设备等 |
嵌入式工程师在学习 Qt 时,可以根据项目需求和个人偏好选择合适的开发方式。
学Qt的同时,一定要学Linxu,Linux也是嵌入式的主力军,广泛应用于消费类电子、工业控制、军工电子、电信/网络/通讯、航空航天、汽车电子、医疗设备、仪器仪表等相关行业。Qt+Linux的组合,一定会让你在职场风生水起!