QT 多线程 使用UI
直接上代码:
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相关推荐
- Qt 多线程TCP服务端一键关闭所有客户端
Qt 多线程TCP服务端一键关闭所有客户端 任务描述: 实现多线程TCP服务端一键关闭所有客户端的连接. 解决过程: 1.Qt的服务端提供了close的功能,但是只用来不响应新接入的客户端. 手册中是 ...
- Qt 多线程的简单演示
Qt 多线程的简单演示 任务:单击""开始""按钮将启动数个工作线程,线程由checkBox 来决定线程的启用或者关闭,各个线程循环打印数字,数字每秒累加1:单 ...
- Qt多线程之继承QObject(moveToThread方式)
Qt多线程有两两种方式,第一种继承QThread,复写run()函数,但是run()和main()类似,run()函数才是子线程的入口函数,所以在设计到类的操作时,必须把对象或者指针放在run函数里面 ...
- (二)Qt多线程实现海康工业相机图像实时采集
系列文章目录 提示:这里是该系列文章的所有文章的目录 第一章: (一)Qt+OpenCV调用海康工业相机SDK示例开发 第二章: (二)Qt多线程实现海康工业相机图像实时采集 文章目录 系列文章目录 ...
- Qt多线程编程(一)入门篇
目录 一.多线程是什么 二.为什么要使用多线程进行开发 1.提高处理效率 2.软件运行更加流畅 3.根据优先级依次处理 三.Qt多线程入门 QThread类,类成员及类成员函数介绍 公有变量 公有函数 ...
- QT 多线程中使用QCanBusDevice进行PCAN通讯时,无法正常发出数据
QT 多线程中使用QCanBusDevice进行PCAN通讯时,无法正常发出数据 前言 我一开始的代码逻辑是,PCAN开启.关闭.发送.接收这些功能整合在一个工具类中,这个工具类的对象是在主线程创建的 ...
- Qt多线程开发(QThread)
关于QT多线程开发介绍 QT下线程的创建方式 Qt中主要有两种创建多线程的方式,一种是直接继承QThread重写run()函数来实现,另外一种是将一个继承于QObject的普通类通过moveToThr ...
- QT多线程调用摄像头录屏软件开发
QT多线程调用摄像头录屏软件开发 文章目录 QT多线程调用摄像头录屏软件开发 前言 一.调用摄像头 二.UI界面设计 1.Button 2.鼠标选择矩形框录制 3.ffmpeg命令行压缩 总结 前言 ...
- QT 多线程创建方法及应用实例
QT 多线程创建方法及应用实例 方法一: (1)创建一个QT应用 (2)创建线程类,继承QThread simplethreadone.h #ifndef SIMPLETHREADONE_H #def ...
最新文章
- mysql视图登录_mysql视图
- 自定义图片字段调用的问题出现{dede:img ..}
- MATLAB实战系列(四十)-小波变换MATLAB图像融合
- 面向对象中的修饰关键词
- PyODPS DataFrame 处理笛卡尔积的几种方式
- 令人难以置信的竞争性编程-您无需学习
- JavaScript多线程 html5 Worker, SharedWorker
- python网页开发实现本地上传_树莓派 python 如何将本地文件上传到指定的服务器页面上...
- 经验 | 我的研究生这三年
- html运行页面一直处在加载状态的解决
- MC下载Forge/Optifine不想有广告怎么办
- Mac版 WPS尾部空格没有下划线解决
- 镜像翻转_《蒙娜丽莎》镜像翻转后,暗藏神秘的第二张脸?网友:笑容消失了...
- LSTM(RNN)中的注意力机制
- Vue中变量前加...三个点什么意思
- mac uvc相机_Mac相机无法正常工作? 这是解决方法
- 我的markdown
- 树莓派网线直连海康威视摄像头
- 全网最详细的Python+Requests接口测试教程:Fiddler抓包工具
- 如何进入游戏行业成为一个程序员
热门文章
- 用 Cocos Creator 模拟书本翻页效果
- python创建长度为n的数组_使用numpy库创建N纬数组(ndarray)的四种创建方法
- BOOTPROTO=none|bootp|dhcp|static
- io_uring 使用教程| io_uring 完全指南 | io_uring 实践指导 | io_uring 资料参考
- mysql executenonquery_mssql server ExecuteNonQuery()注意问题
- 15道APP测试面试题分享,助攻你的面试
- 2022年有哪些半入耳蓝牙耳机?2022年最好的半入耳式蓝牙耳机推荐
- Hexo Next开启阅读全文
- Deformable DETR TBD范式的不二选择
- [RK3288][Android6.0] 调试笔记 --- Camera丢帧检测