Qt子執行緒如何更新UI?

2021-06-23 01:57:00 字數 1198 閱讀 2592

和其他語言類似,不能直接在子執行緒更新ui,可以通過signal-slot機制在ui執行緒進行更新。

signal-slot機制可以在不同物件,不同執行緒之間進行通訊。

例子:

#include "mainwindow.h"

#include #include class mythread : public qthread

;

#include "mythread.h"

#include mythread::mythread(qobject *parent) :

qthread(parent)

void mythread::run()

}

//#ifndef mainwindow_h

#define mainwindow_h

#include #include "mythread.h"

namespace ui

class mainwindow : public qmainwindow

;#endif // mainwindow_h

#include "mainwindow.h"

#include "ui_mainwindow.h"

#include #include "mythread.h"

mainwindow::mainwindow(qwidget *parent) :

qmainwindow(parent),

ui(new ui::mainwindow)

mainwindow::~mainwindow()

void mainwindow::longrunningtask()

void mainwindow::testbuttonclicked()

ui->textedit->settext("test button clicked");

}

子執行緒更新UI

一般在winform c s程式中經常會在子執行緒中更新控制項的情況,桌面程式ui執行緒是主線程,當試圖從子執行緒直接修改控制項屬性時會出現 從不是建立控制項的執行緒訪問它 的異常提示。跨執行緒更新ui控制項的常用方法有兩種 1.使用控制項自身的invoke begininvoke方法 2.使用sy...

QT子執行緒操作UI

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

子執行緒如何非同步更新Fragment的UI介面

通過handler通知fragment contacts介面 public class loadfrienddb extends thread public class fragment contacts extends fragment 但是問題來了,由於非同步執行了執行緒,時間是不一定的!有時候...