Qt定时器QBasicTimer、startTimer、QTimer使用总结
生活随笔
收集整理的這篇文章主要介紹了
Qt定时器QBasicTimer、startTimer、QTimer使用总结
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
這個定時器類是一個 輕量級的、較底層的、被Qt內部使用的定時器類。如果在你的應用程序中使用定時器類,推薦使用QTimer類,而不是這個類。該類和QTimer類類似,也提供start、isActive、stop函數接口。該類的對象不支持復制,即沒有拷貝構造函數和賦值函數,但支持移動語義,所以可以在支持移動語義的容器(如:std::vector)中維護該類對象的列表。Qt官方自帶的例子
Examples\Qt-XX.XX.XX\widgets\widgets\wiggly
工程講解了該定時器類的用法(Example在Qt的安裝目錄下,其中XX.XX.XX為Qt的版本號,如:5.14.1)。
該函數是QObject類的函數。啟動一個定時器并返回該定時器基于整形的定時器id。其有如下兩個重載函數:
當調用startTimer后,每隔interval毫秒(第1個函數)或time(第2個函數)就會發送一個定時器事件,直到 killTimer函數被調用才停止發送。如果interval或time為0,則每次當系統中再也沒有其它事件即當事件隊列中的事件全部處理完時才會發送一次定時器事件。當定時器事件發生時,QOjbect或其子類可以在虛函數timerEvent中捕捉定時器事件,timerEvent函數的參數就是QTimerEvent對象即定期是事件對象。如果有多個定時器正在運行,可以用 QTimerEvent::timerId()找出哪個是正在激活使用的定時器。
class MyObject : public QObject{Q_OBJECTpublic:MyObject(QObject *parent = nullptr);protected:void timerEvent(QTimerEvent *event) override;};MyObject::MyObject(QObject *parent): QObject(parent){startTimer(50); // 50-millisecond timerstartTimer(1000); // 1-second timerstartTimer(60000); // 1-minute timerusing namespace std::chrono;startTimer(milliseconds(50));startTimer(seconds(1));startTimer(minutes(1));// since C++14 we can use std::chrono::duration literals, e.g.:startTimer(100ms);startTimer(5s);startTimer(2min);startTimer(1h);}void MyObject::timerEvent(QTimerEvent *event){qDebug() << "Timer ID:" << event->timerId();}注意:定時器的精度依賴于操作系統和硬件。timerType參數可以用來自定義定時器精度,具體可以查看Qt assist對Qt::TimerType 枚舉的描述。大部分的平臺支持20ms的精度,如果Qt不能提供指定要求的定時器事件,則它會默默地丟棄一些定時器事件。
3. QTimer
這個是比較高端的定時器類,建議大家用這個。這個應該是大家用的比較多的了,故在此不再詳述,請參考Qt assist中的說明。
總結
以上是生活随笔為你收集整理的Qt定时器QBasicTimer、startTimer、QTimer使用总结的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 李书福建议皮卡划入乘用车:既有轿车舒适性
- 下一篇: 微信现支持一键开启青少年模式