繁体   English   中英

QTimer::singleShot(..) 在 connect(..) 函数中

[英]QTimer::singleShot(..) inside connect(..) function

我想在 10 秒后更新我的游戏背景。 我用singleShot QTimer的功能连接函数里面。 它第一次正常工作,但在第一次调用后,每隔 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);

}

所以我删除了singleShot函数并插入了超时 100000 毫秒的简单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);

}

很难理解您在寻找什么,因为您的代码显示了两个不同的计时器。 最好使用单 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();

}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM