19、QTimer类(待补充)---------QT基础
QTimer类(待补充)
QTimer 是 Qt 提供的一个定时器类,继承自 QObject。它允许应用程序在事件循环中安排定时事件,当定时器达到设定的时间间隔后,会触发 timeout() 信号。通过连接该信号到相应的槽(Slot),可以实现定时执行特定操作。
主要特点:
●周期性执行:设置一个时间间隔,定时器每隔该间隔触发一次。
●单次执行:定时器在达到指定时间间隔后只触发一次。
●集成事件循环:与 Qt 的事件循环紧密集成,保证定时操作的可靠性。
周期性定时器
周期性定时器会在每个时间间隔到达时连续触发,适用于需要定期执行的任务。
步骤:
1创建 QTimer 对象。
2连接 timeout() 信号到相应的槽函数。
3设置时间间隔(以毫秒为单位)。
4启动定时器。
演示案例
class MyTicker : public QObject { Q_OBJECT public: explicit MyTicker(QObject *parent = nullptr):QObject(parent){ // 创建定时器 QTimer *timer = new QTimer(this); // 连接 timeout 信号到槽函数 connect(timer, &QTimer::timeout, this, &MyTicker::onTimeout); // 设置时间间隔为1000毫秒(1秒) timer->start(1000); } signals: public slots: //定时器每次到时间后执行的槽函数 void onTimeout(){ // 定时器触发时执行的代码 qDebug("定时器触发"); } };在main函数中创建一个MyTicker,
int main(int argc, char *argv[]) { QApplication a(argc, argv); MyTicker ticker; MainWindow w; w.show(); return a.exec(); }启动程序后会看到控制台不断输出日志
定时器触发 定时器触发 定时器触发 定时器触发单次定时器
单次定时器在指定的时间间隔后只触发一次,适用于需要延迟执行某个操作的场景。
方法:
- 使用
QTimer::singleShot()静态函数。
我们自定义一个类,在构造函数里构造一个单次触发的定时器
#include <QObject> #include <QTimer> class MySingleShot : public QObject { Q_OBJECT public: MySingleShot(QObject *parent = nullptr) : QObject(parent) { // 设定延迟时间为2000毫秒(2秒),触发一条消息 QTimer::singleShot(2000, this, SLOT(onSingleShot())); } signals: public slots: void onSingleShot() { // 单次定时器触发时执行的代码 qDebug("单次定时器触发"); } };接下来在main函数中调用
int main(int argc, char *argv[]) { QApplication a(argc, argv); MySingleShot singleshot; MainWindow w; w.show(); return a.exec(); }运行程序后能看到单次触发的定时器只触发了一次。
企业中的应用
在 Qt 中,可以使用QThread::sleep()函数来使当前线程暂停指定的秒数。这个函数是静态的,属于QThread类。以下是使用QThread::sleep()的一个简单示例:
#include <QCoreApplication> #include <QThread> #include <QDebug> int main(int argc, char *argv[]) { QCoreApplication a(argc, argv); qDebug() << "Sleeping for 3 seconds..."; QThread::sleep(3); // 暂停3秒 qDebug() << "Awake!"; return a.exec(); }请注意,使用这些函数会阻塞当前线程,因此在 GUI 应用程序中使用时要小心,因为它们会导致界面无响应。如果需要在 GUI 应用程序中进行延迟操作,通常可以使用QTimer来实现。
void Delay_MSec(unsigned int msec) { //定义一个新的事件循环 QEventLoop loop; //创建单次定时器,槽函数为事件循环的退出函数 QTimer::singleShot(msec, &loop, SLOT(quit())); //事件循环开始执行,程序会卡在这里,直到定时时间到,本循环被退出 loop.exec(); }拓展知识
QTimer 的常用函数
- start(int msec):启动定时器,时间间隔为
msec毫秒。如果定时器已经在运行,则重启定时器。 - start():启动已经设置了时间间隔的定时器。
- start(int msec, QObject*receiver, Pointer to member function):启动单次定时器,并在超时时调用指定的槽。
- stop():停止定时器。
- isActive():检查定时器是否处于活动状态。
- singleShot(int msec, const QObject*receiver, Pointer to member function):启动一个单次定时器。
- setInterval(int msec):设置定时器的时间间隔。
- interval() const:获取定时器的时间间隔。
