Qt / 定时器
零、前言
在 Qt 中使用定時器有兩種方法:
定時器的精確性依賴于操作系統和硬件,大多數平臺支持 20 ms 的精確度
一、QObject 類的定時器
QObject 是所有 Qt 對象的基類,它提供了一個基本的定時器。通過 QObject::startTimer(),可以把一個 1ms 為單位的時間間隔作為參數來開始定時器,這個函數返回一個唯一的整數定時器的標識符。這個定時器開始就會在每一個時間間隔”觸發",直到明確的使用這個定時器的標識符來調用QObject::killTimer() 結束。
當定時器觸發時,應用程序會發送一個 QTimerEvent。在事件循環中,處理器按照事件隊列的順序來處理定時器事件。當處理器正忙于其它事件處理時,定時器就不能立即處理。
QObject 類還提供定時期的功能。與定時器相關的成員函數有:startTimer()、timeEvent()、killTimer()。QObject 基類中的 startTimer() 和 timerEvent() 原型及說明如下:
開始一個定時器并返回定時器 ID,如果不能開始一個定時器,將返回 0。定時器開始后,每隔interval 毫秒間隔將觸發一次超時事件,直到 killTimer() 被調用來刪除定時器。如果 interval 為 0,那么定時器事件每次發生時沒有窗口系統事件處理。
virtual void QObject::timerEvent(QTimerEvent *event);虛函數 timerEvent() 被重載來實現用戶的超時事件處理函數。如果有多個定時器在運行,QTimerEvent::timerId() 被用來查找指定定時器,對其進行操作。
當定時器事件發生時,虛函數 timerEvent() 隨著 QTimerEvent 事件參數類一起被調用,重載這個函數可以獲得定時器事件。
定時器的用法如下:
//頭文件
#ifndef NEWOBJECT_H #define NEWOBJECT_H#include <QObject> #include <QTimerEvent>class NewObject : public QObject {Q_OBJECTpublic:NewObject( QObject * parent = 0 );virtual ~NewObject();protected:void timerEvent( QTimerEvent *event );private:int m_nTimerId; }; #endif // NEWOBJECT_H//源文件
#include "newobject.h"#include <iostream>NewObject::NewObject( QObject * parent ):QObject( parent ) {m_nTimerId = startTimer(1000); }NewObject::~NewObject() {if ( m_nTimerId != 0 )killTimer(m_nTimerId); }void NewObject::timerEvent( QTimerEvent *event ) {qDebug( "timer event, id %d", event->timerId() ); }二、定時器類 QTimer
定時器類 QTimer 提供當定時器觸發的時候發射一個信號的定時器,他提供只觸發一次的超時事件,通常的使用方法如下:
//創建定時器 QTimer *testTimer = new QTimer(this);//將定時器超時信號與槽(功能函數)聯系起來 connect( testTimer, SIGNAL(timeout()), this, SLOT(testFunction()) );//開始運行定時器,定時時間間隔為1000ms testTimer->start(1000);//停止運行定時器 if ( testTimer->isActive() )testTimer->stop();QTimer 還提供了一個簡單的只有一次定時的函數 singleShot()。?一個定時器在 100ms 后觸發處理函數 animateTimeout() 并且只觸發一次。代碼如下:
QTimer::singleShot( 100, this, SLOT(animateTimeout()) );轉載于:Qt中使用定時器(可使用QObject::timerEvent定時執行,QTimer::singleShot可只觸發一次)_swif_N_F的博客-CSDN博客_qtimer只觸發一次
?
(SAW:Game Over!)
總結
- 上一篇: Qt / QPainter、QPen、Q
- 下一篇: Qt / Qt5 事件(event)机制