直接上代码:

qt的ui操作必须在主线程做的,分支线程只能发送消息给主线程进行引导操作。

所以平常我们的代码都是直接使用一个线程来调动UI,但是不同的线程同时需要使用UI来显示结果之类的就需要相互协调;

如果没有invoke之类的方法,可以考虑直接使用qt 的Qthread;直接使用thread会冲突;

1    需要使用UI的线程所在的类必须是继承自Qthread; 头文件#include<qthread.h>

定义 信号函数

#include <QObject>
#include<qthread.h>
#include<thread>
using namespace std;
class QTgui :public QThread
{Q_OBJECT
signals :void sigCurrentImage2(int img);

2  链接类线程函数(信号)和主界面显示UI的函数(槽)

g1 = new QTgui(this);connect(g1, SIGNAL(sigCurrentImage2(int)), this, SLOT(slot3(int)));

3 在类中重写run函数

void QTgui::run()
{while (add == 0){k += 3;this_thread::sleep_for(std::chrono::milliseconds(timee));emit sigCurrentImage2(k);}
}

4 启动run线程

void QTgui::addd()
{add = 0;start();//std::thread thread1(std::bind(&QTgui::porcess, this));//tthread = &thread1;//tthread->detach();}

5 全部代码  在这里:

#pragma once#include <QObject>
#include<qthread.h>
#include<thread>
using namespace std;
class QTgui :public QThread
{Q_OBJECT
signals :void sigCurrentImage2(int img);
public:QTgui(QObject *parent);~QTgui();int k;int add;int timee=3;std::thread * tthread;void run();void addd();void porcess();
};
#include "QTgui.h"QTgui::QTgui(QObject *parent): QThread(parent)
{k = 0;add = 0;
}QTgui::~QTgui()
{
}void QTgui::run()
{while (add == 0){k += 2;this_thread::sleep_for(std::chrono::milliseconds(timee));emit sigCurrentImage2(k);}
}void QTgui::addd()
{start();//std::thread thread1(std::bind(&QTgui::porcess, this));//tthread = &thread1;//tthread->detach();}void QTgui::porcess()
{while (add == 0){k += 2;this_thread::sleep_for(std::chrono::milliseconds(timee));emit sigCurrentImage2(k);}
}#pragma once#include <QtWidgets/QMainWindow>
#include "ui_threadGui.h"
#include"QTgui.h"
class threadGui : public QMainWindow
{Q_OBJECTpublic:threadGui(QWidget *parent = Q_NULLPTR);QTgui* g1;QTgui* g2;private:Ui::threadGuiClass ui;private slots:void slot2();void slot1();void slot3(int k);
};#include "threadGui.h"threadGui::threadGui(QWidget *parent): QMainWindow(parent)
{ui.setupUi(this);g1 = new QTgui(this);/*connect(g1, &QTgui::sigCurrentImage2, [=](int img) {slot3(img);});*/g2 = new QTgui(this);g2->k = 1;g2->timee = 50;//connect(g2, &QTgui::sigCurrentImage2, [=](int img) {// slot3(img);//});  connect(g1, SIGNAL(sigCurrentImage2(int)), this, SLOT(slot3(int)));connect(g2, SIGNAL(sigCurrentImage2(int)), this, SLOT(slot3(int)));
}void threadGui::slot3(int k)
{if (k %2 ==0 ||true){ui.label->setText(QString::number(k));}else {ui.label_2->setText(QString::number(k));}
}void threadGui::slot1()
{g1->addd();g2->addd();
}void threadGui::slot2()
{g1->add = 1;g2->add = 1;ui.label_3->setText(QString::number(g1->k) + QString::number(g2->k));
}

QT 多线程 使用UI相关推荐

  1. Qt 多线程TCP服务端一键关闭所有客户端

    Qt 多线程TCP服务端一键关闭所有客户端 任务描述: 实现多线程TCP服务端一键关闭所有客户端的连接. 解决过程: 1.Qt的服务端提供了close的功能,但是只用来不响应新接入的客户端. 手册中是 ...

  2. Qt 多线程的简单演示

    Qt 多线程的简单演示 任务:单击""开始""按钮将启动数个工作线程,线程由checkBox 来决定线程的启用或者关闭,各个线程循环打印数字,数字每秒累加1:单 ...

  3. Qt多线程之继承QObject(moveToThread方式)

    Qt多线程有两两种方式,第一种继承QThread,复写run()函数,但是run()和main()类似,run()函数才是子线程的入口函数,所以在设计到类的操作时,必须把对象或者指针放在run函数里面 ...

  4. (二)Qt多线程实现海康工业相机图像实时采集

    系列文章目录 提示:这里是该系列文章的所有文章的目录 第一章: (一)Qt+OpenCV调用海康工业相机SDK示例开发 第二章: (二)Qt多线程实现海康工业相机图像实时采集 文章目录 系列文章目录 ...

  5. Qt多线程编程(一)入门篇

    目录 一.多线程是什么 二.为什么要使用多线程进行开发 1.提高处理效率 2.软件运行更加流畅 3.根据优先级依次处理 三.Qt多线程入门 QThread类,类成员及类成员函数介绍 公有变量 公有函数 ...

  6. QT 多线程中使用QCanBusDevice进行PCAN通讯时,无法正常发出数据

    QT 多线程中使用QCanBusDevice进行PCAN通讯时,无法正常发出数据 前言 我一开始的代码逻辑是,PCAN开启.关闭.发送.接收这些功能整合在一个工具类中,这个工具类的对象是在主线程创建的 ...

  7. Qt多线程开发(QThread)

    关于QT多线程开发介绍 QT下线程的创建方式 Qt中主要有两种创建多线程的方式,一种是直接继承QThread重写run()函数来实现,另外一种是将一个继承于QObject的普通类通过moveToThr ...

  8. QT多线程调用摄像头录屏软件开发

    QT多线程调用摄像头录屏软件开发 文章目录 QT多线程调用摄像头录屏软件开发 前言 一.调用摄像头 二.UI界面设计 1.Button 2.鼠标选择矩形框录制 3.ffmpeg命令行压缩 总结 前言 ...

  9. QT 多线程创建方法及应用实例

    QT 多线程创建方法及应用实例 方法一: (1)创建一个QT应用 (2)创建线程类,继承QThread simplethreadone.h #ifndef SIMPLETHREADONE_H #def ...

最新文章

  1. mysql视图登录_mysql视图
  2. 自定义图片字段调用的问题出现{dede:img ..}
  3. MATLAB实战系列(四十)-小波变换MATLAB图像融合
  4. 面向对象中的修饰关键词
  5. PyODPS DataFrame 处理笛卡尔积的几种方式
  6. 令人难以置信的竞争性编程-您无需学习
  7. JavaScript多线程 html5 Worker, SharedWorker
  8. python网页开发实现本地上传_树莓派 python 如何将本地文件上传到指定的服务器页面上...
  9. 经验 | 我的研究生这三年
  10. html运行页面一直处在加载状态的解决
  11. MC下载Forge/Optifine不想有广告怎么办
  12. Mac版 WPS尾部空格没有下划线解决
  13. 镜像翻转_《蒙娜丽莎》镜像翻转后,暗藏神秘的第二张脸?网友:笑容消失了...
  14. LSTM(RNN)中的注意力机制
  15. Vue中变量前加...三个点什么意思
  16. mac uvc相机_Mac相机无法正常工作? 这是解决方法
  17. 我的markdown
  18. 树莓派网线直连海康威视摄像头
  19. 全网最详细的Python+Requests接口测试教程:Fiddler抓包工具
  20. 如何进入游戏行业成为一个程序员

热门文章

  1. 用 Cocos Creator 模拟书本翻页效果
  2. python创建长度为n的数组_使用numpy库创建N纬数组(ndarray)的四种创建方法
  3. BOOTPROTO=none|bootp|dhcp|static
  4. io_uring 使用教程| io_uring 完全指南 | io_uring 实践指导 | io_uring 资料参考
  5. mysql executenonquery_mssql server ExecuteNonQuery()注意问题
  6. 15道APP测试面试题分享,助攻你的面试
  7. 2022年有哪些半入耳蓝牙耳机?2022年最好的半入耳式蓝牙耳机推荐
  8. Hexo Next开启阅读全文
  9. Deformable DETR TBD范式的不二选择
  10. [RK3288][Android6.0] 调试笔记 --- Camera丢帧检测