项目中遇到了在Qt的一个子线程中使用定时器,
现在记录一下:
这里vacDealThread是一个继承QTread的类,里面有个QTimer*类型的成员变量m_timer,
然后重写它的run方法,
在里面使用定时器的时候,有两点需要注意:
1:new QTimer()时不能加this;
2:在run()方法里一定要加上this.exec();
代码如下:
vacDealThread.h
#ifndef VACDEALTHREAD_H #define VACDEALTHREAD_H #include <QTimer> #include <QThread> class vacDealThread : public QThread { Q_OBJECT private: QTimer *m_timer; public: ~vacDealThread() { delete m_timer; } void run(); }; #endif
vacDealThread.cpp
#include "vacDealThread.h" void vacDealThread::OndealData() { } void vacDealThread::run() { //不能加this m_timer = new QTimer(); m_timer->setInterval(90); connect(m_timer, &QTimer::timeout, this, &vacDealThread::OndealData); m_timer->start(); //一定要有exec() this->exec(); }
当调用了start()子线程启动了之后,每隔一段时间在子线程中便会执行OndealData函数了。