Files
2026-11-06 01:04:35 +08:00

60 lines
3.1 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 项目一:单位换算器
适合第2—3章讲解信号槽、组件访问和函数分工,第4章可继续练习下拉框与字符串处理。
## 运行后试什么
初始输入为 25,源单位为摄氏度,目标单位为华氏度。点击“换算”,应显示 77 °F,并在下方显示公式。也可以在输入框内按 Enter。
切换到长度后,默认将米换成厘米。输入 1,结果应为 100 cm。“交换单位”只交换源单位与目标单位,输入值保持不变。修改输入或单位会清空旧结果,防止把上次的答案当成当前答案。
支持摄氏度、华氏度、开尔文,以及毫米、厘米、米、千米、英寸和英尺。结果最多显示 12 位有效数字。
## 课堂任务
第一步只保留温度输入、换算按钮和结果框。让学生完成摄氏度到华氏度的换算,并解释输入框返回的是字符串,计算需要数值。
第二步加入返回值检查。分别输入空字符串、abc 和 25.5,观察程序怎样决定是否继续计算。当前工程用完整字符串的格式检查配合 toDouble,支持小数和科学计数法,不接受千位分隔符。
第三步加入源单位和目标单位。先统一到摄氏度,再计算目标温度。让学生画出华氏度到开尔文的两步过程,避免只背诵一个总公式。
第四步加入长度换算。单位比例写在数组中,先解释数组下标与下拉框顺序的对应关系,再讨论增加一个单位时需要修改哪些位置。
## 一次换算怎样完成
1. convertButton 发出 clicked 信号,调用 convertValue。
2. 主窗口读取 inputEdit 的文本和两个下拉框的索引。
3. Conversion::convert 检查输入,计算结果,返回 Result。
4. 主窗口根据 Result::ok 显示结果或错误原因。
5. 计算成功后允许复制;输入变化后立即禁用复制并清除旧结果。
Conversion::convert 不直接操作输入框或标签,因此可以使用不同界面调用,也可以单独测试。
## 需要解释的条件
- 温度不能低于绝对零度。摄氏度下限为 −273.15,华氏度下限为 −459.67,开尔文下限为 0。
- 边界比较保留极小的浮点误差余量,防止换算时的舍入把绝对零度判为非法值。
- 本工具中的长度表示非负长度,不表示带方向的坐标位移。
- 输入可以合法,但结果仍可能溢出。输入检查和结果检查分别负责两个阶段。
- 显示的有效数字有限,程序不承诺任意精度计算。
## 学生练习
1. 增加“码”,已知 1 yd = 0.9144 m。检查它与米、英尺之间的换算。
2. 增加“使用本次结果继续换算”按钮,说明它与“交换单位”的区别。
3. 为结果增加可选择的显示精度,并解释显示精度为什么不等于计算精度。
## 验收用例
| 操作 | 预期 |
|---|---|
| 0 °C → °F | 32 |
| 212 °F → °C | 100 |
| −459.67 °F → K | 0 |
| −274 °C → K | 显示低于绝对零度的提示 |
| 1 in → cm | 2.54 |
| 1 ft → m | 0.3048 |
| 输入 12abc、nan 或 1,000 | 拒绝计算 |
| 算出结果后修改输入 | 旧结果清空,复制按钮不可用 |