首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >QTimer::singleShot(..)内部连接(..)函数

QTimer::singleShot(..)内部连接(..)函数
EN

Stack Overflow用户
提问于 2021-10-19 19:11:50
回答 2查看 77关注 0票数 0

我想在10秒后更新我的游戏背景。我在connect函数中使用了QTimer的singleShot函数。它在第一次正确工作,但在第一次调用之后,每隔1秒(大约)就会调用一次更新后台函数。我是Qt新手,请原谅我的无知。相关代码如下:

代码语言:javascript
复制
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);

}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-10-20 13:54:24

因此,我删除了singleShot函数,并插入了超时为100000 ms的简单connect函数。

代码语言:javascript
复制
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);

}
票数 0
EN

Stack Overflow用户

发布于 2021-10-20 13:57:22

很难理解你在寻找什么,因为你的代码显示了两个不同的计时器。使用signle QTimer将是最好的,但我还是不明白800毫秒计时器的原始要求。

代码语言:javascript
复制
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();

}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69636479

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档