Qt 定時器處理函式導致螢幕刷屏

2021-09-06 07:49:26 字數 1278 閱讀 8507

在做智慧型農業實訓系統的時候,我開了個定時器用來判斷介面節點的掉電情況。結果出現了刷屏的現象。鬱悶,不解,以後可以深究為什麼,從網上找了一篇部落格來解決問題,尊重原版

編寫qt程式時,時常會需要使用定時器qtimer來執行一些定時任務,但當定時任務執行的時間過長,則會影響整個介面的響應,因此會想到使用另乙個工作執行緒來執行定時器,一般情況下可以選擇從qthread派生乙個執行緒類,然後過載run並執行任務邏輯,那下面就介紹乙個不用從qthread派生並使用qtimer的例子。

主視窗類標頭檔案加入:

01.qthread*_voicethread;  

02.qtimer* _voicetimer;

建構函式加入:

01.//

使用乙個執行緒,跑定時器

02._voicethread = new

qthread;

03._voicetimer = new

qtimer;

04._voicetimer->setsingleshot(true

);

05.//

在movetothread前先啟動定時器,不然不在乙個執行緒裡,直接呼叫start會失敗

06._voicetimer->start(200

);

07._voicetimer->movetothread(_voicethread);

08.//

09.connect(_voicetimer, signal(timeout()), this

, slot(_onvoicetimeout()), qt::directconnection);

10.//

連線定時器槽,用來停止定時器

11.connect(this

, signal(stop()), _voicetimer, slot(stop()));

12._voicethread->start();

析構函式加入:

01

.emit stop();

02._voicethread->quit();

03._voicethread->wait();

04.

05.delete _voicetimer;

06.delete _voicethread;

定時器槽:

01.void

test::_onvoicetimeout()

02.

Qt之定時器

qt中定時器的使用有兩種方法,一種是使用qobject類提供的定時器,還有一種就是使用qtimer類。定時器類qtimer提供當定時器觸發的時候發射乙個訊號的定時器,它提供只觸發一次的超時事件。1 啟動定時器 int m timerid starttimer 300 啟動乙個qtimer型別的定時器...

Qt定時器問題

1.如果此類繼承於qobject,可以直接呼叫以下函式 int qobject starttimer int interval,qt timertype timertype qt coarsetimer 此函式開啟乙個定時器,但只返回該定時器的編號,我們無法獲取定時器物件 即使建立了定時器物件也不應...

Qt定時器(一)

定時器也是乙個我們經常使用的東西。下面的 演示了定時器的基本使用方法。include mainwindow.h include ui mainwindow.h mainwindow mainwindow qwidget parent qmainwindow parent ui new ui main...