如何在设定的时间段内使用定时器

时间:2015-03-30 13:46:41

标签: c++ qt timer

我使用信号和插槽几次使用了一个计时器,我启动它并继续运行并每隔几秒钟调用一次事件。

QTimer * timer = new QTimer();
connect(timer,SIGNAL(timeout()),this,SLOT(move()));
timer->start(50);

我想知道如何在一段时间内使用计时器,例如

如果我的程序中出现了某些问题 - >

//Start CountdownTimer(3 seconds)
setImage("3secondImage.jpg");
//when time allocated is up
resetOrginalImage("orig.jpg");

我不知道如何做到这一点任何帮助或正确方向的一点将非常感激。

2 个答案:

答案 0 :(得分:3)

QTimer有singleShot()。但是你需要创建一个没有参数的单独插槽:

private slots:
    void resetImage() {resetOrginalImage("orig.jpg");}

...
setImage("3secondImage.jpg");
QTimer::singleShot(3000, this, SLOT(resetImage()));

答案 1 :(得分:0)

如果您正在使用C ++ 11,则使用带有QTimer的lambda表达式可以更容易阅读,特别是如果计时器只执行少量代码行: -

QTimer * timer = new QTimer();
timer->setSingleShot(true); // only once

connect(timer, &QTimer::timeout, [=]{
    // do work here
    resetOrginalImage("orig.jpg");
};

timer->start(3 * 1000); // start in 3 seconds

在我看来,它比在计时器超时时声明要调用的单独函数更优雅。