项目二:课堂计时器
适合第3—4章讲解信号槽、定时器、状态变化和数值输入。可用于限时练习、分组讨论与课堂展示。
功能与操作
时长范围为 0 到 23:59:59,但零时长不能开始。默认时长为 5 分钟。
- 开始:从设置的时长开始计时。
- 暂停:保存此刻的剩余时间。
- 继续:从保存的剩余时间接着计时。
- 复位:停止本轮计时,并恢复到设置的完整时长。
- 重新开始:到时后开始新的一轮。
- 全屏显示:便于投影;按 Esc 退出全屏。
- 到时提示:显示“时间到”,并可播放一次系统提示音。能否听到提示音取决于系统声音设置。
运行中和暂停时,时长输入框均被锁定;先复位,再修改时长。
课堂任务
先连接开始按钮和 QTimer,让学生观察 timeout 信号重复到达。随后故意安排一次较慢的界面处理,讨论“每次 timeout 减 100 毫秒”为什么可能不准确。
QTimer 在这个项目中每隔约 100 毫秒请求刷新显示。实际剩余时间由 QElapsedTimer 提供的经过时间计算,不依赖刷新次数。即使某次刷新较晚,下一次仍按实际经过的时间计算。
讲解模型时可先使用确定的数值:总时长 10 秒,在第 2.5 秒暂停,还剩 7.5 秒;暂停 1 分钟后继续,剩余时间仍从 7.5 秒开始。
核心数据
Countdown 保存四项信息:完整时长、当前计时片段开始时的剩余量、该片段的开始时刻,以及状态。
运行时: 剩余毫秒 = max(0, 片段开始时的剩余毫秒 − 本片段已过去的毫秒)。
暂停时先算出剩余毫秒并保存,再切换到 Paused。继续时只记录新的片段开始时刻,不恢复完整时长。
界面显示秒数采用向上取整。还剩 1 毫秒时显示 1 秒,真正到时才显示 0,避免“已经显示零但还没结束”的现象。
状态与操作
| 当前状态 | 开始按钮 | 暂停按钮 | 时长输入 |
|---|---|---|---|
| Ready | 开始,零时长除外 | 不可用 | 可修改 |
| Running | 不可用 | 暂停 | 锁定 |
| Paused | 继续 | 不可用 | 锁定 |
| Finished | 重新开始 | 不可用 | 可修改 |
refreshDisplay 根据同一个状态统一设置按钮,避免在多个槽函数中分别修改后产生矛盾。
学生练习
- 加入 1、3、5 分钟快捷设置按钮,并遵守运行中不能改变时长的规则。
- 最后 10 秒改变数字颜色,到时和复位后恢复正确颜色。
- 增加本轮标题,例如“独立练习”。标题变化不应重新开始计时。
验收用例
- 设置 1 秒并开始:到时显示 00:00:00,暂停按钮不可用。
- 运行时连续触发开始操作:不会重新计算起点。
- 暂停后等待:剩余时间保持不变;继续后接着减少。
- 运行或暂停时点击复位:回到原设置时长,并允许修改。
- 设置零时长:不能开始。
- 模型两次更新之间跨过截止时间:剩余量直接归零,不出现负数。
自动化测试通过传入固定的毫秒数检查计时规则;另有真实按钮测试确认计时模型与界面的连接。