QTimer和void timerEvent(QTimerEvent *event)
QTimer
QTimer是我们常用的定时器,具备信号槽功能。但注意常见的两个报错信息:
- “QObject::startTimer: Timers can only be used with threads started with QThread”
- “QObject::startTimer: Timers cannot be started from another thread”
void timerEvent(QTimerEvent *event)
没有信号槽功能,类内使用,可以重写此函数实现一般的定时功能。
DEMO:
//头文件
class MyObject : public QObject
{
Q_OBJECT
public:
MyObject(QObject *parent = 0);
protected:
void timerEvent(QTimerEvent *event);
private:
int timerID1;
int timerID2;
int timerID3;
};
//CPP文件
MyObject::MyObject(QObject *parent)
: QObject(parent)
{
timerID1 = this->startTimer(1000); // 50-millisecond timer
timerID2 = this->startTimer(3000); // 1-second timer
timerID3 = this->startTimer(6000); // 1-minute timer
}
void MyObject::timerEvent(QTimerEvent *event)
{
int id = event->timerId();
if(id == timerID1) {
qDebug() << "Timer ID:" << timerID1;
} else if(id == timerID2) {
qDebug() << "Timer ID:" << timerID2;
} else if(id == timerID3) {
qDebug() << "Timer ID:" << timerID3;
} else {
qDebug() << "Timer ID ERR";
}
}