QT非UI线程更新UI(跨线程更新UI)

笔者最近在弄一个QT的一个小工具,需要把日志格式化输出,但是方法的执行过程是耗时的,如果不自己进行处理就会阻塞主界面,瞬间降低软件的使用体验。

所以通过查资料发现QT的信号传递更新UI非常好用,记录一下,也给碰到类似问题的小伙伴直接提供一个参考。

首先,另起的UI线程需要自己重写类继承Qthread线程基类,需要Q_OBECT宏具体代码如下(我这里新建的命名位XThread的类)

XThread.h 如下
#include 


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("发送给UI线程信号,这里是新开线程的主逻辑--------------------");
}

在UI类里面需要对对应的控件进行收取并指定对应的更新UI的具体逻辑:
例如(具体逻辑根据自己UI更新的逻辑来)

XThread  *xth = new XThread();
xth->start();
connect(xth,&XThread::toUI,this,&MainWindow::AddLog);
MainWindow::AddLog(QString msg){
		this->textedit->append(msg);
}

你可能感兴趣的:(QT,ui,qt,开发语言)