QT 定時器的詳細使用方法和注意點 Qobject QTimer sleep


qt有定時器我知道的有三種,一個是sleep,一個是time類,一個QObject自帶的定時方法.我現在喜歡用這個

 

1  定義一個全局的變量用於記錄定時器id,需要幾個定時器就定義幾個id.注意初始化id時候最好設置為0,因為  重復執行killTimer(0)不會報錯

int temtimerID01 = 0 ;
// int QObject::startTimer ( int interval ) ;   //正常情況下ID應該保存為全局變量
// void QObject::timerEvent ( QTimerEvent * event );//在這個里面判斷時不時這個ID,做相應的處理
// void QObject::killTimer ( int id );      //通過ID殺死當前定時器

 

2  在public中重寫這個函數,所有的中斷事件都在這里面處理

 

 

 

具體實現如下  記得添加頭文件  #include <QTimerEvent>

 

 

 3  使用如下

  killTimer(timerID01);//開啟一幀數據傳輸之后,開啟定時器.開啟前先關掉以前的定時器
    timerID01 = startTimer(3000);//三秒定時//后期根據實際情況反映//不過3秒應該夠了

4  注意點:

    killTimer(timerID01);時候如果timerID是0,則不管kill幾次都可以,但是其他情況多次kill可能出錯,因此在每次正常情況kill之后都加上一句timrID=0,親測可以使用

 

 

定時器第二種 qtimer

 

//只執行一次

QTimer::singleShot( 3000, [this]() { function();} );

繼承自當前進程,3秒后執行一次function()。

 

多次執行 注意定時器延時默認精度不高,需要手動設置更高精度

    QTimer *timer40sCheck = new QTimer(this);
    timer40sCheck->setTimerType(Qt::PreciseTimer);//提高定時器精度
    connect(timer40sCheck,&QTimer::timeout,this,[=]() mutable{
        function();
    });
    timer40sCheck->start(40000);

 

 

 

不使用定時器的用法,做簡單延時但是不影響界面

QCoreApplication::processEvents(QEventLoop::AllEvents);
Sleep(100);

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM