【发布时间】:2021-10-19 19:11:49
【问题描述】:
我想在 10 秒后更新我的游戏背景。我在connect函数中使用了QTimer的singleShot函数。它第一次确实可以正常工作,但是在第一次调用之后,每 1 秒(左右)就会调用更新后台函数。我是Qt新手,请原谅我的无知。
以下是相关代码:
void Scene::setUpPillarTimer(QGraphicsPixmapItem* pixItem)
{
QTimer *backgroundTimer = new QTimer();
int durationOfPillar = 0;
pillarTimer = new QTimer(this);
connect(pillarTimer, &QTimer::timeout,this, [=]()mutable{
PillarItem *pillarItem = new PillarItem(durationOfPillar);
addItem(pillarItem);
backgroundTimer->singleShot(10000, this, [=](){
updateBackground(pixItem);
});
});
pillarTimer->start(800);
}
【问题讨论】:
-
您知道
pillarTimer每 800 毫秒触发一次并且每次都安装一个单次计时器吗? -
哦,所以每 800 毫秒创建一个新的
singleShot计时器。正确的 ? @Botje -
还有什么其他方式可以每 10 秒调用一次
updateBackground? @Botje -
只需创建一个常规的 QTimer,超时时间为 10000。
-
好的会看到的。谢谢