Qt中的QTimer會定時發出QTimerEvent事件,您可以設定一個接受QTimerEvent的函式來接收這個事件,一旦接收到QTimerEvent事件,函式的內容就會被執行,例如接下來的範例,將設計一個數位時鐘,可以顯示目前時間與日期。
數位時鐘的顯示將使用QLCDNumber,這邊直接繼承QLCDNumber來實作:
#ifndef DIGITALCLOCK_H #define DIGITALCLOCK_H
#include <QLCDNumber>
class DigitalClock : public QLCDNumber {
public: DigitalClock(QWidget *parent=0);
protected: void timerEvent(QTimerEvent *);
private: bool isColon; };
#endif
在DigitalClock中,重新定義了timerEvent()來接受TimerEvent,以定時接受QTimer的事件並進行時間的擷取與顯示更新,DigitalClock實作如下:
#include "DigitalClock.h"
#include <QDateTime>
DigitalClock::DigitalClock(QWidget *parent) : QLCDNumber(parent) { this->isColon = false; this->setFrameStyle(QFrame::Panel | QFrame::Raised); this->setNumDigits(11); QObject::startTimer(500); }
void DigitalClock::timerEvent(QTimerEvent *e) { isColon = !isColon; QString timeString = QTime::currentTime().toString().left(5); QDate date = QDate::currentDate(); QString dateString; dateString.sprintf( " %2d-%2d", date.month(), date.day()); QString displayString = timeString + dateString; if (!isColon) { displayString[2] = ' '; } display(displayString); }
QTimer的啟動是使用QObject::startTimer(500),如果想停止QTimer,則使用QTimer::killTimer(),500的單位是毫秒,這邊每0.5秒發出一次事件,每次timerEvent()接受到QTimerEvent事件時,會擷取目前的時間與日期,每0.5秒處理一次是為了處理冒號的顯示,這是由timerEvent()中if判斷式來負責。
撰寫一個主程式來看看這個元件是否運作正常:
#include "DigitalClock.h" #include <QApplication>
int main(int argc, char *argv[]) { QApplication app(argc, argv); DigitalClock *digitalClock = new DigitalClock;
digitalClock->resize(500, 80); digitalClock->setWindowTitle("QTimer");
digitalClock->show(); return app.exec(); }
執行的結果畫面如下所示:

|