我想在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);
}发布于 2021-10-20 13:54:24
因此,我删除了singleShot函数,并插入了超时为100000 ms的简单connect函数。
void Scene::setUpPillarTimer(QGraphicsPixmapItem* pixItem)
{
QTimer *backgroundTimer = new QTimer(this);
int durationOfPillar = 0;
connect(backgroundTimer, &QTimer::timeout, this, [=](){
updateBackground(pixItem);
});
backgroundTimer->start(10000);
pillarTimer = new QTimer(this);
connect(pillarTimer, &QTimer::timeout,this, [=]()mutable{
PillarItem *pillarItem = new PillarItem(durationOfPillar);
addItem(pillarItem);
});
pillarTimer->start(800);
}发布于 2021-10-20 13:57:22
很难理解你在寻找什么,因为你的代码显示了两个不同的计时器。使用signle QTimer将是最好的,但我还是不明白800毫秒计时器的原始要求。
void Scene::setUpPillarTimer(QGraphicsPixmapItem* pixItem)
{
QTimer *backgroundTimer = new QTimer();
backgroundTimer->setInterval(10000); //msec
connect(backgroundTimer, &QTimer::timeout,this, [=]()mutable{
// Here this is executed every 10 seconds
PillarItem *pillarItem = new PillarItem(durationOfPillar);
addItem(pillarItem);
updateBackground(pixItem);
});
});
backgroundTimer->start();
}https://stackoverflow.com/questions/69636479
复制相似问题