Qt 关于定时器实用的总结
生活随笔
收集整理的這篇文章主要介紹了
Qt 关于定时器实用的总结
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
文章目錄
- Qt 關于定時器實用的總結
- 第一種方案:startTimer + QTimerEvent
- 第二種方案:QTimer類+信號和槽
- 定時器與線程
Qt 關于定時器實用的總結
在實際編程中常常會使用到定時器,現在就將定時器的用法作個總結。
第一種方案:startTimer + QTimerEvent
對于一個QObject的子類,只需要使用
int QObject::startTimer(int interval) 函數來開啟一個定時器。當定時器溢出時可以在timerEvent() 函數中進行相關操作。
例如:
// 開啟一個1秒定時器,返回其ID 代表該定時器 id1 = startTimer(1000); //1000毫秒為一秒 id2 = startTimer(2000); id3 = startTimer(3000); //溢出處理函數 void Widget::timerEvent(QTimerEvent *event) {// 判斷是哪個定時器,在調試窗口輸出相應的語句。if(event->timerId() == id1){qDebug() << "timer1";}else if(event->timerId() == id2){qDebug() << "timer2";}else{qDebug() << "timer3";} }第二種方案:QTimer類+信號和槽
使用QTimer類來構造一個定時器,然后信號和槽關聯溢出事件。
例如:
在構造函數中添加:
槽函數里實現相關操作:
// 定時器溢出處理 void Widget::timerUpdate() {// 實現相關操作//.....}定時器與線程
編寫QT程序時,時常會需要使用定時器QTimer來執行一些定時任務,但當定時任務執行的時間過長,則會影響整個界面的響應,因此會想到使用另一個工作線程來執行定時器,一般情況下可以選擇從QThread派生一個線程類。
例如:
在窗口類頭文件加入:
QThread* pWThread;
QTimer* pWTimer ;
1、構造定時器線程:
/* ---------------構造一個定時器線程------------------------------*/pWThread= new QThread(this);pWTimer = new QTimer();pWTimer->start(200);pWTimer->moveToThread(pWThread);connect(pWTimer,SIGNAL(timeout()),this,SLOT(on_TimeoutSlot()),Qt::QueuedConnection);connect(pWThread, SIGNAL(finished()), pWThread, SLOT(deleteLater()));connect(this, SIGNAL(stop()), pWTimer, SLOT(stop()));pWThread->start();2、
void Test::on_TimeoutSlot() {// 實現相關操作//.....}3、析構函數加入:
emit stop(); pWThread->quit(); pWThread->wait(); delete pWTimer ; delete pWThread;總結
以上是生活随笔為你收集整理的Qt 关于定时器实用的总结的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Socket连接心跳包的机制总结
- 下一篇: DW1000 TX POWER (发射功