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

项目二:课堂计时器

适合第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,暂停按钮不可用。
  • 运行时连续触发开始操作:不会重新计算起点。
  • 暂停后等待:剩余时间保持不变;继续后接着减少。
  • 运行或暂停时点击复位:回到原设置时长,并允许修改。
  • 设置零时长:不能开始。
  • 模型两次更新之间跨过截止时间:剩余量直接归零,不出现负数。

自动化测试通过传入固定的毫秒数检查计时规则;另有真实按钮测试确认计时模型与界面的连接。