一、QTimer简介
Qt定时器是一种用来处理周期性和延时性任务的机制,其可以在一定时间间隔后执行指定的操作,或者说是在设定的时间过去之后发出timeout()信号。
QTimer继承自QObject,可以被添加到QCoreApplication或者QWidget中,也可以在QThread中使用。
QTimer的单个定时响应可使用singleShot()函数触发。
二、QTimer的使用方法
使用QTimer比较简单,步骤如下:
1.在头文件中引入QTimer
#include <QTimer>
2.在需要使用的地方创建QTimer对象
QTimer *timer = new QTimer(this);
3.设置定时时间,以毫秒为单位
timer->setInterval(1000);
4.设置定时器是否单次触发,true为单次触发,false为周期触发
timer->setSingleShot(true/false);
5.连接定时器的timeout()信号到需要执行的槽函数中
connect(timer, &QTimer::timeout, this, &MainWindow::onTimeout);
6.启动定时器
timer->start();
三、延时执行的方法
使用QTimer可以轻松实现延时执行的功能。
例如我们要延迟5秒执行一个操作:
QTimer::singleShot(5000, this, &MyClass::myFunc);
其中5000表示5秒,myFunc是自定义的槽函数。
四、QTimer的进阶应用
QTimer还可以使用QEventLoop实现阻塞式延时执行。
例如我们要延迟5秒执行一些操作,并在此期间GUI保持响应,可以使用如下代码:
QTimer timer; QEventLoop loop; timer.setSingleShot(true); QObject::connect(&timer, &QTimer::timeout, &loop, &QEventLoop::quit); timer.start(5000); loop.exec(); //执行一些操作
在上述代码中,QEventLoop的exec()函数会阻塞当前线程,直到定时器超时后停止事件循环。
五、小结
QTimer是一个简单又实用的定时器机制,可以应用于各种场景,如延时执行、周期性执行等。
使用QTimer的步骤非常简单,只需创建QTimer对象、设置定时时间和单次触发属性,连接定时器的timeout()信号到需要执行的槽函数中,并启动定时器即可。
在高级应用中,可以使用QEventLoop实现阻塞式延时执行,让GUI保持响应。