学习 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 不需要单独部署数据库服务器,适合大多数课程项目。

这一章必须跑通完整数据流程:

  1. 用户输入数据;
  2. 程序检查格式和业务规则;
  3. 数据写入 SQLite;
  4. 查询结果显示到界面;
  5. 用户能够修改和删除;
  6. 程序重启后数据仍然存在。

简单管理系统可以使用 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. 四个里程碑

整条路线可以用四个时间点检查:

  1. 第 2 章:界面原型能够点击和切换;
  2. 第 4 章:输入、保存、查询、修改和删除形成闭环;
  3. 第 6 章:得到可以完整演示的 MVP;
  4. 第 8 章:得到可以在其他电脑运行的最终提交包。

接下来从第一章开始,先建立稳定的 Qt 开发环境和最小可运行项目,再进入正式课程项目的界面设计。