1.定時器
Qt 中的定時器類是QTimer,。QTimer不是一個可見的界面組件。
QTimer繼承自QObject類,其主要屬性是interval,該屬性設置定時中斷的周期,單位為毫秒;QTimer主要的信號是timeout(),在定時中斷時發射此信號。
在程序設計中,如果需要高精度定時器,一般不建議采用Qt的QTimer類,這是因為QTimer定時器優先級較低,其准確性不高。
目前Qt中的主要采用2種定時器調用方式,一個是QTimer類,另一個是QObject類。
2.定時器類型
常量 | 值 | 描述 |
Qt::PreciseTimer | 0 | 精確的定時器,盡量保持毫秒精度 |
Qt::CoarseTimer | 1 | 粗略的定時器,盡量保持精度在所需的時間間隔5%范圍內 |
Qt::VeryCoarseTimer | 2 | 很粗略的定時器,只保留完整的第二精度 |
QTimer和QObject的定時器事件默認的定時器類型是CoarseTimer。
3.使用方法
1.QTimer
QTimer * timer = new QTimer(this); connect(timer,SIGNAL(timeout(),this,SLOT(timerSlot())); timer->setTimerType(Qt::PreciseTimer);//如果不設置,默認為CoarseTimer類型 timer->start(); 結束時: timer->stop();
2.QObject
timerID = this->startTimer(10000); void DemoTimer::timerEvent(QTimerEvent *event)//事件響應函數,當定時器超時后,會進入該函數 { if(event->timerId() == timerID) { handleTimeout(); } } void DemoTimer::handleTimeout() { if(timerID) { killTimer(timerID); timerID = 0; } }
其中,int QObject::startTimer(int interval) 為開啟定時器函數,參數為毫秒級,當開啟成功后會返回這個定時器的ID,並且每隔interval時間后會進入timerEvent函數,直到定時器被殺死。