笔者最近在弄一个QT的一个小工具,需要把日志格式化输出,但是方法的执行过程是耗时的,如果不自己进行处理就会阻塞主界面,瞬间降低软件的使用体验。
所以通过查资料发现QT的信号传递更新UI非常好用,记录一下,也给碰到类似问题的小伙伴直接提供一个参考。
首先,另起的UI线程需要自己重写类继承Qthread线程基类,需要Q_OBECT宏具体代码如下(我这里新建的命名位XThread的类)文章来源:https://www.toymoban.com/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("发送给UI线程信号,这里是新开线程的主逻辑--------------------");
}
在UI类里面需要对对应的控件进行收取并指定对应的更新UI的具体逻辑:
例如(具体逻辑根据自己UI更新的逻辑来)文章来源地址https://www.toymoban.com/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);
}
到了这里,关于QT非UI线程更新UI(跨线程更新UI)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!