如何在设定的时间段内使用计时器
Posted
技术标签:
【中文标题】如何在设定的时间段内使用计时器【英文标题】:How To Use Timer For A Set Period Of Time 【发布时间】:2015-03-30 13:46:40 【问题描述】:我已经使用信号和插槽多次使用计时器,我启动它并继续运行并每隔几秒调用一次事件。
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");
我不知道该怎么做
【问题讨论】:
【参考方案1】:QTimer 有singleShot()
。但是您需要创建一个不带参数的单独插槽:
private slots:
void resetImage() resetOrginalImage("orig.jpg");
...
setImage("3secondImage.jpg");
QTimer::singleShot(3000, this, SLOT(resetImage()));
【讨论】:
我只希望它被调用一次? @svlasov 它会被调用一次。 单次计时器只触发一次,非单次计时器每间隔毫秒触发一次。【参考方案2】:如果您使用的是 C++ 11,则将 lambda 表达式与 QTimer 一起使用会更容易阅读,尤其是在计时器只执行少量代码的情况下:-
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
在我看来,这比在计时器超时时必须声明要调用的单独函数要优雅一些。
【讨论】:
以上是关于如何在设定的时间段内使用计时器的主要内容,如果未能解决你的问题,请参考以下文章
ReactNative: 定时器setTimeoutsetIntervalsetImmediate的使用