QTimer工作流程
程序示例
test_timee.h
//继承QObject,使用信号/槽
class TestTimer: public QObject
{Q_OBJECT
public:TestTimer(QObject *parent = nullptr);public slots:void start();void stop();void do1();private://定义timer对象QTimer m_timer;
};
test_timer.cpp
#include "test_timer.h"
#include <QDebug>
#include <QDateTime>TestTimer::TestTimer(QObject *parent): QObject(parent)
{//指定定时器间隔m_timer.setInterval(1000);//定时器触发connect(&m_timer, &QTimer::timeout, this, &TestTimer::do1);
}void TestTimer::start()
{if(m_timer.isActive()){return;}m_timer.start();
}void TestTimer::stop()
{if(!m_timer.isActive()){return;}m_timer.stop();
}void TestTimer::do1()
{QDateTime dt=QDateTime::currentDateTime();QString str=dt.toString("hh:mm:ss");qDebug()<<"time out"<<str;
}
总结
- 使用对象或者指针变量根据实际需要(优先使用对象)。
- 定时器需要信号/槽触发。
- 定时器和主线程在同一个线程中。
补充
除了直接使用QTimer定时器外,还有如下方法:
- 继承QObject,重写void timerEvent(QTimerEvent *event)
- 通过QTimerEvent的id来区分不同的事件源。