【发布时间】:2018-12-27 21:07:29
【问题描述】:
我正在构建一个简单的游戏,它会向用户显示倒计时,从 1:00 开始倒计时到零。到了 0:00 时,我想显示一条消息,例如“时间到了!”。
我目前有一个 QTimer 和一个 QTime 对象(QTime 从 00:01:00 开始)
QTimer *timer=new QTimer();
QTime time{0,1,0};
在构造函数中,我将计时器设置为每 1 秒超时一次,并且它连接到一个更新屏幕倒计时的事件,该事件最初在 1:00 显示计时器:
connect(timer, SIGNAL(timeout()), this, SLOT(updateCountDown()));
timer->start(1000);
ui->countdown->setText(time.toString("m:ss"));
这是每 1 秒调用一次的槽:
void MainWindow::updateCountDown(){
time=time.addSecs(-1);
ui->countDown->setText(time.toString("m:ss"));
}
现在我需要能够在 QTime 到达 0:00 时调用新方法。我不太热衷于在 updateCountdown 方法上添加if 来检查 QTime 是否在每秒 0:00。我还想也许我可以添加一个在 1 分钟超时的第二个 QTimer,但我不确定两个 QTimer 对象是否会在完全相同的时间启动,所以 1 分钟超时将恰好在 QTime 对象为 0 时发生: 00.
那么有没有办法向同一个 QTimer 对象添加第二次超时(每秒超时一次以更新屏幕上的倒计时,然后在 1 分钟后第二次超时以结束游戏?我怀疑答案将是“不”,但在这种情况下,最好的方法是什么?(如果我的选项都无效,有没有更好的方法呢?)。
【问题讨论】:
-
你为什么不使用两个不同的计时器?
-
据我了解,您希望每秒显示时间,如果时间用完,即达到
0:00,则调用另一个函数。我是对的? -
@JesperJuhl 使用 2 个计时器是我想到的方法之一,但我不确定它们是否会同时启动(也许它们在不同的线程或其他一些特定于实现的东西上使它们在每个程序运行时以不同的方式启动)。
-
“我不太热衷于在 updateCountdown 方法上添加一个 if 来检查 QTime 是否在每秒 0:00。”为什么不?这就是你应该做的。
-
@Floella 正如 Nikos C 所指出的,正确的方法是验证。