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);