# 简易计算器 —— Day2 下午案例参考实现(代码布局版) > 对应教案 [`OUTLINE_4DAY.md`](../../OUTLINE_4DAY.md) Day2 下午「信号槽机制 → > 项目案例:简易计算器」。教师侧参考答案,手工维护,非生成产物。 > Designer 表单对照版见 [`../calculator_designer/`](../calculator_designer/README.md)。 ## 覆盖的知识点(讲解时逐条回指) | 环节 | 知识点 | 首次出现 | |---|---|---| | 界面骨架 | `QGridLayout` 排数字/运算符键盘 | Day2 下午(脚手架先用后学,Day3 下午讲透原理) | | 信号槽写法 1 | lambda + 第五参数 context(数字/运算符键批量绑定) | Day2 下午 | | 信号槽写法 2 | 成员函数指针连接(等号/清空/退格键) | Day2 下午 | | 坑点规避 | 所有 `connect` 只在构造函数执行一次,不留「重复 connect」隐患 | Day2 ★坑卡 | | 编码 | 中文/符号按钮文字 `QStringLiteral` + 源文件 UTF-8 | Day2 ★坑卡 | | 状态机 | 数字/小数点/运算符/等号/清空/退格 六类输入的最小状态机;连续按运算符走「链式计算」;除零给出 `Error` 而不崩溃 | 案例本身 | ## 验证方式(自测模式) ```bash QT_QPA_PLATFORM=offscreen tools/run_qt.sh qt_calculator # 自测流程:直接调用与按钮绑定的同一批处理函数(等价于点击),依次验证 # 「7+3=10」「6÷0=Error」「4.5+0.5=5」「12 退格→1」「2+3+4=9(链式运算)」 # 全部通过退出码 0,任一步失败退出码 1 tools/run_qt.sh qt_calculator # 有 X 环境:完整交互 ``` ## 课堂讲解建议 1. 先跑成品:现场敲一次「7 + 3 =」,再回头拆代码——项目 = 已学知识点的组装; 2. 重点讲两种 connect 写法的取舍:数字/运算符键数量多、逻辑相同,用 lambda 捕获参数 + 统一槽函数(`onDigit(int)`/`onOperator(QChar)`); 等号/清空/退格各自唯一,直接用成员函数指针更直观; 3. 现场移除某个按钮的 `connect`,演示"按钮显示正常、点击没反应"——呼应 QAction 忘 connect 的坑(Day3 会再见到同一类问题); 4. 除零处理是刻意设计的教学点:不用 `assert`/崩溃,而是给出可恢复的错误状态 (`Error` + 下一次输入自动清空),这是「健壮性」在中初级学员能理解层面的 最小示范。 ## 练习方向(对应任务卡 2 · 课后作业) 见 [`OUTLINE_4DAY.md`](../../OUTLINE_4DAY.md) Day2 下午「16:00–17:00 作业」与 `slides/day2.html` 任务卡 2;本参考实现即该作业的教师侧标准答案,**不要在课上 直接展示源码给学生抄**,讲解思路后学生自己实现。 ## 参考 - 布局脚手架来源:`p03/ch08/custom_widget.cpp`(`QHBoxLayout`/`QSlider` 联动) - 信号槽写法来源:`p03/ch04/`(`builtin_signal_slot.cpp`、`custom_signal_slot.cpp`、 `lambda_signal_slot.cpp`) - Designer 表单对照版:[`../calculator_designer/`](../calculator_designer/README.md)