Qt中UI執行緒與子執行緒的互動

2021-10-04 13:15:18 字數 911 閱讀 1561

gui框架一般只允許ui執行緒操作介面元件,qt也是如此。但我們的應用程式一般是多執行緒的,勢必就涉及到ui執行緒與子執行緒的互動。

下面介紹常用的ui執行緒與子執行緒互動方式,並附上自己的demo。

qt中提供了一些執行緒安全的方法來讓我們使用:

a.使用訊號槽

qt的訊號槽是執行緒安全的。connect函式的第五個引數connectiontype預設為qt::autoconnection,如果接收者和傳送者不在乙個執行緒,則相當於自動使用qt::queuedconnection型別,槽函式會在接收者執行緒執行。

connect(this,&mainwindow::signaldoing,worker,&myworker::slotdoing);
b.使用 qmetaobject::invokemethod

invokemethod可以執行緒安全的對目標物件進行操作,如呼叫目標物件的成員函式等。它也具有乙個connectiontype引數,參照connect。

qdebug()<<"main thread"connect(this,&mainwindow::signaldoing,worker,&myworker::slotdoing);

//worker操作結果

//啟動執行緒

thread->start();

//【示例b】通過invokemethod方法

//(這裡我直接用concurrent模組的run函式)

qdebug()<<"main thread"bool mainwindow::event(qevent *event)

}return qmainwindow::event(event);

}

參考部落格:

QT子執行緒操作UI

在qt中,子執行緒是無法直接操作ui的,否則會報錯,會出現執行緒衝突之類的錯誤。可以用兩種方法實現 1 使用訊號和操操作,子執行緒給ui所在的主線程發訊號 2 使用invokemethod方法。方法樣例如下 threadtest.h ifndef threadtest h define thread...

qt 執行緒與ui執行緒同步

qt 執行緒與ui執行緒同步 收藏 本文 http hi.baidu.com buptyoyo blog item b7b035ef2233a9d8b31cb137.html 目前只會一種,採用訊號槽機制。通常情況下,訊號和槽機制可以同步操作,這就意味著在發射訊號的時候,使用直接函式即可以立刻呼叫連...

Qt子執行緒如何更新UI?

和其他語言類似,不能直接在子執行緒更新ui,可以通過signal slot機制在ui執行緒進行更新。signal slot機制可以在不同物件,不同執行緒之間進行通訊。例子 include mainwindow.h include include class mythread public qthre...