日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Qt / 定时器

發布時間:2024/10/14 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Qt / 定时器 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

零、前言

在 Qt 中使用定時器有兩種方法:

  • 使用 QObiect 類的定時器;
  • 使用 QTimer 類。
  • 定時器的精確性依賴于操作系統和硬件,大多數平臺支持 20 ms 的精確度

    一、QObject 類的定時器

    QObject 是所有 Qt 對象的基類,它提供了一個基本的定時器。通過 QObject::startTimer(),可以把一個 1ms 為單位的時間間隔作為參數來開始定時器,這個函數返回一個唯一的整數定時器的標識符。這個定時器開始就會在每一個時間間隔”觸發",直到明確的使用這個定時器的標識符來調用QObject::killTimer() 結束。
    當定時器觸發時,應用程序會發送一個 QTimerEvent。在事件循環中,處理器按照事件隊列的順序來處理定時器事件。當處理器正忙于其它事件處理時,定時器就不能立即處理。
    QObject 類還提供定時期的功能。與定時器相關的成員函數有:startTimer()、timeEvent()、killTimer()。QObject 基類中的 startTimer() 和 timerEvent() 原型及說明如下:

    int QObject::startTimer(int interval);

    開始一個定時器并返回定時器 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 / 定时器的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。