Arce 发表于 2021-7-8 15:06:14

Qt子线程如何更新UI,完整的代码示例

  Qt涉及到大量的数据更新,图像处理,视频编解码时,在主线程直接进行会让主线程阻塞,程序直接卡死,直达阻塞的部分完成,界面才更新,大家会想到用多线程来解决这类问题,但是Qt的子线程中又无法更新UI,  这是很麻烦的事,不像MFC子线程可以直接操作UI,其实Qt在子线程也可以更新UI线程。
  例如下面的界面,信息在线程产生,主线程如何获得呢?

  Qt有信号发射机制 emit,例如,我们将信息封装到结构体,在线程执行时发到UI线程,在UI线程响应子线程发射的信号,这样Qt的子线程就可以间接的更新UI线程。
  子线程头文件:
#pragma once

#include <QThread>
#include <string>

using namespace std;

//自定义消息结构
typedef struct {
string name;
int id;
int age;
}Msg;

class ChildThread : public QThread
{
Q_OBJECT

public:
ChildThread();
~ChildThread();

//重写线程实体函数
void run();

private:
Msg msg;

//自定义信号
signals:
void Send2UI(Msg msg);
};

  
文档来源:51CTO技术博客https://blog.51cto.com/u_12570763/3012495
页: [1]
查看完整版本: Qt子线程如何更新UI,完整的代码示例