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

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

在我看来,这比在计时器超时时必须声明要调用的单独函数要优雅一些。

【讨论】:

以上是关于如何在设定的时间段内使用计时器的主要内容,如果未能解决你的问题,请参考以下文章

C#如何实现鼠标左键自动点击并自己设定点击间隔

如何在 C++ 中使用计时器在给定时间内强制输入?

如何在 Java 中每天在设定的时间运行代码? [复制]

ReactNative: 定时器setTimeoutsetIntervalsetImmediate的使用

如果在设定的时间内未按下键盘,您是否可以触发在谷歌应用程序脚本中运行的功能?

三菱PLC中,如何把计时器的时间传送到寄存器里 就是把C0中的数据存入D0中 急急急急