66 lines
3.1 KiB
Markdown
66 lines
3.1 KiB
Markdown
# 项目二:课堂计时器
|
|
|
|
适合第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. 加入 1、3、5 分钟快捷设置按钮,并遵守运行中不能改变时长的规则。
|
|
2. 最后 10 秒改变数字颜色,到时和复位后恢复正确颜色。
|
|
3. 增加本轮标题,例如“独立练习”。标题变化不应重新开始计时。
|
|
|
|
## 验收用例
|
|
|
|
- 设置 1 秒并开始:到时显示 00:00:00,暂停按钮不可用。
|
|
- 运行时连续触发开始操作:不会重新计算起点。
|
|
- 暂停后等待:剩余时间保持不变;继续后接着减少。
|
|
- 运行或暂停时点击复位:回到原设置时长,并允许修改。
|
|
- 设置零时长:不能开始。
|
|
- 模型两次更新之间跨过截止时间:剩余量直接归零,不出现负数。
|
|
|
|
自动化测试通过传入固定的毫秒数检查计时规则;另有真实按钮测试确认计时模型与界面的连接。
|
|
|