学习 Qt 的目的不是把所有类名背下来,而是能够独立完成一个可以演示、测试和打包的课程项目。参考手头 Qt6 教程中关于项目创建、信号与槽、窗口系统、事件、绘图、文件、网络、多线程、数据库和打包的章节,我把原本按知识点排列的目录重新组织成一条由 8 个章节组成的项目路线。
这里的章节表示知识与项目实践的依赖顺序,不代表每章必须学习一周。只有两三天集中学习时,可以在同一天连续推进多个章节,但每章的实践作品和验收目标仍然保留。
这条路线默认使用 Qt 6、C++17、Qt Widgets、CMake 和 SQLite。如果课程模板明确要求 .pro 文件,再改用 qmake;否则新项目统一使用 CMake。
1. 最终目标
完成八个章节后,项目至少应做到:
- 能在没有 Qt 开发环境的 Windows 电脑上运行;
- 包含清晰的主窗口、对话框和数据展示区域;
- 完成输入、校验、保存、查询、修改和删除的数据闭环;
- 能正确处理空数据、非法输入和文件读写失败;
- 界面缩放时不出现严重重叠或横向溢出;
- 源代码按界面、业务逻辑和数据访问进行基本分层;
- 提供程序包、源代码、README、测试记录和演示材料。
这里的关键不是功能数量,而是让一个范围适中的软件真正完整。
2. 教材内容的优先级
课程项目不需要严格按照教材页码从头读到尾,可以根据交付目标划分优先级。
| 优先级 | 教材内容 | 学习要求 |
|---|---|---|
| 必学 | 创建 Qt 项目 | 会创建、配置、构建、运行和调试项目 |
| 必学 | 信号与槽 | 掌握标准连接、自定义信号槽和 Lambda |
| 必学 | QWidget、QMainWindow、QDialog | 能搭建完整桌面界面 |
| 必学 | 常用控件、布局、资源文件 | 界面能够随窗口尺寸变化 |
| 必学 | 事件与事件过滤器 | 能处理输入、关闭和全局交互 |
| 必学 | 文件系统 | 能保存配置并完成导入导出 |
| 多数项目必学 | 数据库操作 | 使用 SQLite 实现数据持久化 |
| 必学 | 程序打包 | 生成可以提交和演示的软件 |
| 按需学习 | QPainter 和绘图设备 | 绘图、图像处理和可视化项目使用 |
| 按需学习 | TCP、UDP 和 Socket | 聊天室、局域网或客户端项目使用 |
| 按需学习 | 多线程 | 只有存在真实耗时任务时再引入 |
| 可以后补 | 不规则窗体、QPicture、UDP 组播 | 除非项目需求明确涉及 |
Qt 历史、支持平台和坐标系等内容需要了解,但不应占用项目早期的大量时间。
3. 八章路线总览
| 章节 | 主题 | 本章交付物 | 笔记 |
|---|---|---|---|
| 第 1 章 | 环境、CMake、事件循环、QObject、信号与槽 | 可运行的学习计时器 | 阅读 |
| 第 2 章 | QMainWindow、常用控件、布局、对话框、资源 | 可点击的课程项目界面原型 | 阅读 |
| 第 3 章 | 事件、输入校验、数据模型、代码分层 | 基于内存数据的完整操作流程 | 阅读 |
| 第 4 章 | 文件、JSON、QSettings、SQLite | 数据库增删改查闭环 | 阅读 |
| 第 5 章 | 绘图、网络或其他项目专题 | 一个体现项目特色的核心功能 | 阅读 |
| 第 6 章 | 功能整合与 MVP | 可以完整演示的版本 | 阅读 |
| 第 7 章 | 测试、异常处理、性能与体验 | 稳定的发布候选版本 | 阅读 |
| 第 8 章 | Release、打包、文档和答辩 | 最终提交包 | 阅读 |
4. 第 1 章:建立最小开发闭环
第一章解决“程序如何运行”和“对象如何协作”两个问题。
学习内容包括:
- Qt Creator 中 Kit、构建目录和运行配置的含义;
- CMake 如何找到 Qt 并链接 Widgets 模块;
QApplication与 GUI 事件循环;- QObject 的父子对象关系和生命周期;
- 信号、槽、函数指针连接语法和 Lambda;
- QString、QList、QVariant 和 QTimer 等常用类型。
阶段作品是一个学习计时器,支持开始、暂停、重置和时间显示。它虽然简单,却足以打通编辑、构建、运行、调试和 Git 提交的完整流程。
详细笔记见《Qt 课程项目第 1 章:环境、事件循环与信号槽》。
5. 第 2 章:完成界面原型
这一章集中学习 Qt Widgets:
- QWidget、QMainWindow 和 QDialog;
- 菜单栏、工具栏和状态栏;
- QLabel、QLineEdit、QPushButton、QComboBox、QTableView;
- 水平、垂直、网格和表单布局;
- Qt Designer 生成的
.ui文件; .qrc图标与资源文件;- QSS 样式表、选择器、悬停状态和圆角边框。
本章就要开始正式课程项目。先搭出所有主要页面和导航,让按钮能够切换页面或打开对话框,暂时可以使用模拟数据。
验收时重点检查窗口缩放。控件应由布局管理,不使用大量 setGeometry() 固定位置。
6. 第 3 章:交互与代码结构
在界面能够操作后,继续学习:
- 鼠标、键盘和关闭事件;
event()与事件过滤器;- 输入验证和错误提示;
- 自定义信号和槽;
- Model/View 的基本概念;
- 界面、业务和数据访问的职责边界。
建议将项目逐步拆分为下面的结构:
src/
├── main.cpp
├── ui/ 窗口和对话框
├── models/ 领域对象与数据模型
├── data/ 文件和数据库访问
├── services/ 业务逻辑
└── utils/ 通用工具
resources/
tests/
MainWindow 应负责组织界面和协调对象,而不是承载全部查询、校验和数据处理代码。
7. 第 4 章:建立数据闭环
先学习 QFile、QTextStream、JSON 和 QSettings,再使用 Qt SQL 连接 SQLite。SQLite 不需要单独部署数据库服务器,适合大多数课程项目。
这一章必须跑通完整数据流程:
- 用户输入数据;
- 程序检查格式和业务规则;
- 数据写入 SQLite;
- 查询结果显示到界面;
- 用户能够修改和删除;
- 程序重启后数据仍然存在。
简单管理系统可以使用 QSqlTableModel 快速完成表格操作。业务规则较复杂时,再使用 QSqlQuery 配合 Repository 或 Service 层。
8. 第 5 章:只选择一个项目专题
这一章不追求模块数量,而是根据项目类型选择一条支线。
| 项目类型 | 重点模块 | 合适的特色功能 |
|---|---|---|
| 管理系统 | Qt SQL、Model/View、文件 | 搜索、统计、CSV 导入导出 |
| 聊天或联机软件 | TCP/IP、客户端与服务器 | 在线状态、消息记录、文件传输 |
| 绘图或图像软件 | QPainter、QImage、事件 | 缩放、标注、撤销与重做 |
| 数据采集软件 | Socket、定时器、线程 | 实时曲线、日志和数据保存 |
| API 客户端 | Qt Network、JSON | 天气、翻译或公开数据查询 |
只有在任务确实会阻塞主线程时才使用 QThread。GUI 控件必须留在主线程,工作对象通过信号返回进度和结果。
9. 第 6 章:冻结需求并完成 MVP
第 6 章开始停止添加大功能,集中整合:
- 主窗口与页面导航;
- 两到三个核心业务对象;
- 增删改查;
- 搜索、排序或过滤;
- 数据持久化;
- 导入导出;
- 设置和关于页面;
- 明确的错误提示。
本章结束时,软件可以不够精致,但必须能够从头到尾完整演示。登录、换肤和启动动画可以作为辅助功能,不能替代核心业务。
10. 第 7 章:测试和稳定性
测试范围至少覆盖:
- 空输入、格式错误和重复数据;
- 数据库或配置文件不存在;
- 文件选择被取消;
- 删除操作的确认与取消;
- 窗口缩放和高分辨率显示;
- 网络断开或服务器不可用;
- 程序重新启动后的数据一致性;
- 耗时操作是否冻结界面。
可以使用 Qt Test 测试数据层和业务逻辑。界面测试则以主要用户流程为单位,记录操作步骤、预期结果和实际结果。
11. 第 8 章:打包与答辩
最后一章完成:
- Release 构建;
- 使用
windeployqt收集 Qt DLL、平台插件和其他依赖; - 在没有 Qt Creator 的环境中测试;
- 首次运行时自动初始化数据库;
- README、使用说明、需求分析和架构说明;
- 数据库 ER 图、测试用例表和运行截图;
- 5~8 分钟的答辩演示流程。
演示前准备一份干净的初始数据和一份备份数据,避免现场输入占用太多时间,也避免误操作影响后续演示。
12. 推荐的默认项目
如果还没有确定选题,可以制作一个“课程与作业管理系统”:
- 管理课程、作业、截止日期和完成状态;
- 按课程、状态和日期过滤;
- 支持关键词搜索;
- 使用 SQLite 保存数据;
- 支持 CSV 导入导出;
- 提供到期提醒、设置和关于页面。
在此基础上,从日历视图、数据统计、系统托盘提醒或网络同步中选择一到两个亮点即可。控制范围比堆叠技术更重要。
13. 四个里程碑
整条路线可以用四个时间点检查:
- 第 2 章:界面原型能够点击和切换;
- 第 4 章:输入、保存、查询、修改和删除形成闭环;
- 第 6 章:得到可以完整演示的 MVP;
- 第 8 章:得到可以在其他电脑运行的最终提交包。
接下来从第一章开始,先建立稳定的 Qt 开发环境和最小可运行项目,再进入正式课程项目的界面设计。