gpt4 book ai didi

c++ - QTimer: "multiple timeouts"可能吗?

转载 作者:行者123 更新时间:2023-11-28 01:25:44 26 4
gpt4 key购买 nike

我正在构建一个向用户显示倒计时的简单游戏,从 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 分钟后第二次超时以结束游戏?我怀疑答案是“否”,但在那种情况下,最好的方法是什么?(如果我的选项均无效,是否有更好的方法?)。

最佳答案

第一个问题的答案是否定的——QTimer 支持单个超时(或者单个指定的时间间隔,如果它不是在单次模式下运行的话)。

第二个问题的答案是——最好的方法是最简单可行的方法。使用单个 QTimer,并在您的 updateCountdown() 方法中包含一个 if 语句,以便在倒计时最终达到零时执行不同的操作。 (顺便说一句,您实际上并不需要使用 QTime 对象来表示倒计时;您可以轻松地使用从 60 开始递减直到达到的 int 0)

为什么这样更好/更简单?您可以改用两个 QTimer 对象,但是您必须担心如何使它们保持同步——目前这可能不是什么大问题,但是当您想要添加一个“暂停”按钮时会发生什么到你的游戏,或者当你想添加一个时间奖励给玩家 10 秒的额外游戏时间?突然之间,您的 60 秒计时器将不再正确,在所有情况下正确停止和重新启动它都会很痛苦。

If 语句很简单,而且易于理解/控制/调试;所以你不妨使用一个。

关于c++ - QTimer: "multiple timeouts"可能吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53950888/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com