Day3 教学示例:增强版计算器接入 + QMainWindow/QSS 两版参考实现
- calculator_designer_ext(Day2 增强版:表达式求值 + 括号,递归下降解析器)接入 cmake - calculator_mainwindow(Day3 上午):增强版计算器装进 QMainWindow, 菜单/状态栏/历史停靠窗,纯代码 + 显式 connect,与 mainwindow_showcase 形成坑卡对照 - calculator_mainwindow_qss(Day3 下午):上午版 + QSS 双主题美化(按键分色/伪状态/深浅切换) - 验证 mainwindow_showcase(QMainWindow 六大组件综合演示,.ui + .qrc) - OUTLINE_4DAY.md / ASSIGNMENTS.md Day3 衔接增强版起点 + 参考实现指引 - 补提交 Day2 calculator/ 与 calculator_designer/ 参考实现(CMakeLists 已引用) - 全量构建 28/28,4 目标离屏自测退出码 0 Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -7,6 +7,8 @@
|
||||
> 因此本文即新基准下的正式教案大纲;此前对齐旧方案书的 5 天版
|
||||
> [`OUTLINE.md`](OUTLINE.md) 保留作历史参照与素材库(其 24 张概念/坑卡在本文
|
||||
> 全部复用)。幻灯片 `day1.html`…`day5.html` **已按本文重排**(§9 落地状态)。
|
||||
> Day2–4 课堂练习/课后作业的分层(基础版+挑战版)作业单见
|
||||
> [`ASSIGNMENTS.md`](ASSIGNMENTS.md)。
|
||||
|
||||
## 0. 基准与显式假设(供随时纠偏)
|
||||
|
||||
@@ -138,7 +140,7 @@
|
||||
| 环节 | 内容 | 素材 |
|
||||
|---|---|---|
|
||||
| 信号槽(50min 讲 + 20min 练) | 观察者模式;内置/自定义/lambda 三种写法;新旧语法对比;连接方式 Direct/Queued/Auto | `p03/ch04/builtin_signal_slot.cpp`、`custom_signal_slot.cpp`、`lambda_signal_slot.cpp` |
|
||||
| 计算器案例(40min 带练) | 数字/运算键盘 + 点击信号槽 + 结果显示;**布局用教师提供的 `QGridLayout` 脚手架「先用后学」**(布局原理 Day3 下午讲透,今天只求能排出键盘) | `p03/ch03` + `p03/ch04` + 脚手架片段(授课时现场给出) |
|
||||
| 计算器案例(40min 带练) | 数字/运算键盘 + 点击信号槽 + 结果显示;**布局用教师提供的 `QGridLayout` 脚手架「先用后学」**(布局原理 Day3 下午讲透,今天只求能排出键盘) | `p03/ch03` + `p03/ch04` + 教师参考实现 [`examples/calculator/`](examples/calculator/README.md)(另有 [`examples/calculator_designer/`](examples/calculator_designer/README.md) Qt Designer `.ui` 对照版,含「自动连接静默失效」坑点) |
|
||||
|
||||
概念/坑卡:**信号槽三种写法[沿用]**(含旧语法静默失败、`QOverload` 消歧义)、外加——
|
||||
|
||||
@@ -161,7 +163,7 @@
|
||||
|
||||
| 环节 | 内容 | 素材 |
|
||||
|---|---|---|
|
||||
| QMainWindow(45min 讲 + 20min 练) | 主窗口架构:菜单栏/工具栏/状态栏/中心部件/停靠窗 | `p03/ch05/central_widget.cpp`、`dock_widget.cpp` |
|
||||
| QMainWindow(45min 讲 + 20min 练) | 主窗口架构:菜单栏/工具栏/状态栏/中心部件/停靠窗 | `p03/ch05/central_widget.cpp`、`dock_widget.cpp`;综合演示 [`examples/mainwindow_showcase/`](examples/mainwindow_showcase/README.md)(极简文本编辑器,.ui 表单 + 自动连接,覆盖 wiki ch05 六大组件) |
|
||||
| QDialog(45min 讲 + 20min 练) | 模态 vs 非模态(三种非模态写法对比:栈/堆/`WA_DeleteOnClose`);标准对话框 `QMessageBox`/`QFileDialog` | `p03/ch06/modal_dialog.cpp`、`modeless_dialog_stack.cpp`、`modeless_dialog_heap.cpp`、`modeless_dialog_deleteonclose.cpp`、`message_box_question.cpp`、`file_dialog.cpp` |
|
||||
|
||||
概念/坑卡(本节两张为本文新写,5 天版未覆盖 ch05/ch06):
|
||||
@@ -176,8 +178,15 @@
|
||||
析构,窗口一闪而过**——`p03/ch06` 三个 modeless 版本正是这个坑的对照教材,也是
|
||||
Day2 栈/堆所有权卡的第三次复现。
|
||||
|
||||
11:00–12:00 课堂练习:给昨天的计算器套上 QMainWindow——加菜单「帮助→关于」弹
|
||||
`QMessageBox`;加一个「历史」停靠窗(可先放空 QLabel)。
|
||||
11:00–12:00 课堂练习:以 Day2 增强版计算器([`examples/calculator_designer_ext/`](examples/calculator_designer_ext/README.md))为起点,套上 QMainWindow——加菜单「帮助→关于」弹
|
||||
`QMessageBox`;加一个「历史」停靠窗(可先放空 QLabel)。参考实现:
|
||||
[`examples/calculator_mainwindow/`](examples/calculator_mainwindow/README.md)(纯代码
|
||||
建菜单 + 显式 connect,与 `mainwindow_showcase` 的 `.ui` 自动连接形成坑卡对照)。
|
||||
|
||||
> 衔接说明:Day2 增强版 `CalculatorDesigner` 已是独立 `QWidget`,Day3 上午只做
|
||||
> 「外壳升级」——`setCentralWidget` 把它装进 `QMainWindow`,核心求值逻辑不动。
|
||||
> 唯一新增是 `CalculatorDesigner` 加一个 `evaluated` 信号供历史停靠窗订阅(Day2
|
||||
> 信号槽知识的复用)。详见参考实现 README。
|
||||
|
||||
### Day 3 下午:布局管理器 / 常用控件(+QSS 美化)
|
||||
|
||||
@@ -185,7 +194,7 @@
|
||||
|---|---|---|
|
||||
| 布局管理器(40min 讲 + 15min 练) | QHBox/QVBox/QGrid;嵌套布局;伸缩因子——回收 Day2 计算器脚手架,讲透当时「先用后学」的部分 | `p03/ch08/custom_widget.cpp` |
|
||||
| 常用控件(35min 讲 + 15min 练) | QLabel 文本/HTML/图片、QLineEdit、按钮族;资源系统 `.qrc` | `p03/ch08/label_text_html.cpp`、`label_pixmap.cpp`、`label_movie.cpp` |
|
||||
| QSS 界面美化(25min 讲 + 20min 练) | 选择器/伪状态/层叠——对应新安排「自适应排版及**美化**」目标 | `docs/teaching/examples/qss_styling/qt_qss_styling.cpp` + [README](examples/qss_styling/README.md) |
|
||||
| QSS 界面美化(25min 讲 + 20min 练) | 选择器/伪状态/层叠——对应新安排「自适应排版及**美化**」目标 | `docs/teaching/examples/qss_styling/qt_qss_styling.cpp` + [README](examples/qss_styling/README.md);作业线参考 [`examples/calculator_mainwindow_qss/`](examples/calculator_mainwindow_qss/README.md)(上午版 + 双主题 QSS) |
|
||||
|
||||
概念/坑卡:**布局管理[沿用]**(同控件不能属两个布局;布局后 `setGeometry` 被
|
||||
覆盖)、**资源系统 .qrc[沿用]**(路径静默失败/AUTORCC)、**QSS 美化[沿用]**
|
||||
@@ -193,6 +202,8 @@
|
||||
|
||||
16:00–17:00 作业:计算器升级——数字键/运算键/等号键用 QSS 区分颜色,至少 1 个按钮
|
||||
有 `:hover` 或 `:pressed` 效果;整体布局改为可随窗口缩放(验收同 5 天版 QSS 任务卡)。
|
||||
参考实现:[`examples/calculator_mainwindow_qss/`](examples/calculator_mainwindow_qss/README.md)(在
|
||||
Day3 上午版基础上只加 QSS,演示「美化与逻辑正交」)。
|
||||
|
||||
### Day 4 上午:Qt 消息机制和事件 / 绘图事件及表格事件
|
||||
|
||||
@@ -395,5 +406,25 @@ QThread 提升环节**——若 Day5 案例讲解超时挤掉它,项目期「
|
||||
3. ✅ **Day5 综合案例参考实现**:`docs/teaching/examples/student_manager/`
|
||||
(QMainWindow + QTableWidget + 对话框 + JSON round-trip + QThread 后台导入;
|
||||
离屏自测模式自动校验「写入→读回」与导入闭环)。
|
||||
3.1 ✅ **Day2 案例参考实现**:`docs/teaching/examples/calculator/`(代码
|
||||
`QGridLayout` 版)+ `docs/teaching/examples/calculator_designer/`(Qt Designer
|
||||
`.ui` 对照版,含自动连接 `on_<objectName>_<signal>` 静默失效坑点);两版业务
|
||||
逻辑一致,离屏自测覆盖加减乘除/链式运算/除零/退格 5 组用例。
|
||||
3.2 ✅ **Day2 增强版计算器**:`docs/teaching/examples/calculator_designer_ext/`
|
||||
(在 Designer 版基础上把「立即计算」升级为「表达式求值」——独立 `ExpressionEvaluator`
|
||||
递归下降解析器,支持运算符优先级 + 括号含嵌套/未闭合自动补全;双显示区;离屏自测
|
||||
9 组用例含 `2+3*4=14`、`(2+3)*4=20`)。作为 Day3 的起点。
|
||||
3.3 ✅ **Day3 上午 QMainWindow 组件综合演示**:`docs/teaching/examples/mainwindow_showcase/`
|
||||
(极简文本编辑器形态,`.ui` 表单 + `.qrc` 资源 + `on_<obj>_<sig>` 自动连接,覆盖
|
||||
wiki ch05 的 5.1–5.6 六大组件;离屏退出码 0)。教师讲组件协议时用,与下方
|
||||
`calculator_mainwindow` 形成 `.ui`/自动连接 vs 纯代码/显式 connect 的坑卡对照。
|
||||
3.4 ✅ **Day3 上午参考实现**:`docs/teaching/examples/calculator_mainwindow/`
|
||||
(把 Day2 增强版 `CalculatorDesigner` 装进 `QMainWindow`:菜单/状态栏/历史停靠窗;
|
||||
`CalculatorDesigner` 仅加 `evaluated` 信号 + `loadExpression` 方法供历史订阅/回填;
|
||||
纯代码建菜单 + 显式 connect;离屏自测 9 组计算 + 历史追加/双击回填/清空)。
|
||||
3.5 ✅ **Day3 下午参考实现**:`docs/teaching/examples/calculator_mainwindow_qss/`
|
||||
(上午版 + QSS 双主题美化:按键按功能分色 + `:hover`/`:pressed` + 深/浅主题切换;
|
||||
与上午版仅 `mainwindow.{h,cpp}` 差异,演示「美化与逻辑正交」;离屏自测含主题切换
|
||||
改变 `styleSheet` 的断言)。
|
||||
4. ✅ 新 10 天安排正式文本已落入 [`docs/SCHEDULE_2026_10DAY.md`](../SCHEDULE_2026_10DAY.md);
|
||||
`OUTLINE.md` §0 与幻灯片 `index.html` 已补两版关系说明。
|
||||
|
||||
Reference in New Issue
Block a user