筆者最近在弄一個(gè)QT的一個(gè)小工具,需要把日志格式化輸出,但是方法的執(zhí)行過程是耗時(shí)的,如果不自己進(jìn)行處理就會阻塞主界面,瞬間降低軟件的使用體驗(yàn)。
所以通過查資料發(fā)現(xiàn)QT的信號傳遞更新UI非常好用,記錄一下,也給碰到類似問題的小伙伴直接提供一個(gè)參考。
首先,另起的UI線程需要自己重寫類繼承Qthread線程基類,需要Q_OBECT宏具體代碼如下(我這里新建的命名位XThread的類)文章來源:http://www.zghlxwxcb.cn/news/detail-528539.html
XThread.h 如下
#include <QThread>
class XThread : public QThread
{
Q_OBJECT
public:
XThread();
protected:
void run();
signals:
void toUI(QString msg);
};
XThread.cpp 如下
#include "XThread.h"
XThread::XThread()
{
}
void XThread::run()
{
emit toUI("發(fā)送給UI線程信號,這里是新開線程的主邏輯--------------------");
}
在UI類里面需要對對應(yīng)的控件進(jìn)行收取并指定對應(yīng)的更新UI的具體邏輯:
例如(具體邏輯根據(jù)自己UI更新的邏輯來)文章來源地址http://www.zghlxwxcb.cn/news/detail-528539.html
XThread *xth = new XThread();
xth->start();
connect(xth,&XThread::toUI,this,&MainWindow::AddLog);
MainWindow::AddLog(QString msg){
this->textedit->append(msg);
}
到了這里,關(guān)于QT非UI線程更新UI(跨線程更新UI)的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!