Qt子线程控制主界面UI控件

2023-10-26

在子线程里控制主界面的UI控件有两种方法:第一种是在子线程中发送信号,然后在主线程中去更新;第二种方法是在子线程中创建同样的对象,然后把主界面中控件的指针赋给创建的对象。

第一种方法在此不做实例展示,在此通过一个简单的例子展示第二种方法:

下面是主界面的初始转态:

 

下面这个是继承自QThread类的子线程类

​​sonthread.h​​

#ifndef SONTHREAD_H
#define SONTHREAD_H

#include <QLabel>
#include <QThread>
#include <QDebug>

class sonThread : public QThread
{
    Q_OBJECT
public:
    explicit sonThread(QObject *parent = nullptr);
    void run();

public:
    QLabel *label;
};

#endif // SONTHREAD_H

​​sonthread.cpp​​

#include "sonthread.h"

sonThread::sonThread(QObject *parent) : QThread(parent)
{
    label = new QLabel;
}

void sonThread::run()
{
    qDebug()<<"run()"<<QThread::currentThreadId();
    
    label->setText("更新");
}

下面是主线程类

​​​dialog.h​​

#ifndef DIALOG_H
#define DIALOG_H

#include <QDialog>
#include <QThread>
#include "sonthread.h"

namespace Ui {
class Dialog;
}

class Dialog : public QDialog
{
    Q_OBJECT

public:
    explicit Dialog(QWidget *parent = 0);
    ~Dialog();


private:
    Ui::Dialog *ui;
};

#endif // DIALOG_H

​dialog.cpp​​

#include "dialog.h"
#include "ui_dialog.h"


Dialog::Dialog(QWidget *parent) :
    QDialog(parent),
    ui(new Ui::Dialog)
{
    ui->setupUi(this);

    sonThread *sonthread = new sonThread;  //创建子线程对象
    sonthread->label=ui->label;  //将主界面UI指针赋给子线程中的指针对象
    sonthread->start();  //启动子线程

    qDebug()<<"Dialog()"<<QThread::currentThreadId();

}

Dialog::~Dialog()
{
    delete ui;
}

下面是运行结果:

 

可以看出run()函数与主线程不在同一个线程,而我只在run()中有修改过label的字符,所以实现了在子线程中操作主界面UI控件的目的。

本文福利,费领取Qt开发学习资料包、技术视频,内容包括(C++语言基础,Qt编程入门,QT信号与槽机制,QT界面开发-图像绘制,QT网络,QT数据库编程,QT项目实战,QSS,OpenCV,Quick模块,面试题等等)↓↓↓↓↓↓见下面↓↓文章底部点击费领取↓↓

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Qt子线程控制主界面UI控件 的相关文章

随机推荐

  • elasticsearch生产集群部署-3个节点集群部署

    1 在三个节点上都下载es 如果要安装es 首先就要从官网elastic co downloads elasticsearch下载es的安装包 并且最新es版本要求有JDK 8以上的版本 es安装包的目录结构大致如下 bin 存放es的一些
  • 软件测试

    简介 安装多个版本的Python在Windows电脑上是一项非常常见的任务 特别是当你需要在不同的Python项目中使用不同版本的Python时 下面是一个详细的步骤指南 帮助你在Windows上安装多个Python版本 步骤1 下载Pyt
  • 第六章——稀疏矩阵

    稀疏矩阵的基本概念 稀疏矩阵也是一种比较特殊的矩阵类型 但比起上一节提到的特殊矩阵类型 它特殊的地方不在于元素的分布而是在于稀疏矩阵中非0元素的个数s相对于矩阵元素的总个数t非常小 例如一个100 100的矩阵 若其中只有100个非0元素
  • ILRuntime 第一集

    一 ILRuntime的介绍 IOS无法热更的原因 苹果AppStore的审核准则中 命令禁止应用程序分配具有可执行权限的内存 带有JT功能的的脚本虚拟机无法运行 无法加载动态链接库 安卓Google Play强制64位之后也必须使用IL2
  • 有什么让你相见恨晚的 MacBook 神器?

    给大家推荐一些都是免费且能极大地提高 Mac 使用体验的小工具吧 快速启动工具 Manico 如果你和派君一样喜欢用键盘来切换应用 那么 Manico 就是你心目中的神器了 Manico 的使用非常简单 安装打开后 按下 Option 键
  • libevent源码学习(4):线程锁、条件变量(二)(调试锁)

    目录 EVUTIL ASSERT宏 开启调试锁 调试锁结构 调试锁函数 debug lock alloc debug lock free debug lock lock 加锁检测 debug lock unlock 解锁检测 调试锁下的条件
  • Java intern函数详解

    先看一个例子如果你会了那这篇文章你没必要看了 如果不会那请看下去 你一定会有收获 String s new String hello String str1 s world String str3 helloworld system out
  • Linux安装sftp服务

    处理步骤 1 关闭防火墙和selinux root localhost systemctl status firewalld firewalld service firewalld dynamic firewall daemon Loade
  • PN结图示(全网都不舍得放的图片)

    这是从必应随手搜到的 PN结的图示 很直观的可以让人理解 P 和 N 在术语里的意思 而这是从国内百度搜的国人给的图示 说实话我搜了N年 愣是没找到跟图上一样的 咱也不懂为什么 PN结图示 全网都不舍得放的图片 这里会涉及到两个基本术语 正
  • scriptmanager控件使用

    今天用到scriptmanager 顺便整理一下 网络资料 一 控件概述 ScriptManager控件包括在ASP NET 2 0 AJAX Extensions中 它用来处理页面上的所有组件以及页面局部更新 生成相关的客户端代理脚本以便
  • mysql sql 除法运算_SQL语句怎么表示除法运算?

    展开全部 select case when 除数 0 then 0 else 被除数 除数 end 一 基本概念 SQL语言 是结构化查询语言 Structured Query Language 的简称 e69da5e6ba90626169
  • 线性光耦原理与电路设计[HCNR200,HCNR201]

    1 线形光耦介绍 光隔离是一种很常用的信号隔离形式 常用光耦器件及其外围电路组成 由于光耦电路简单 在数字隔离电路或数据传输电路中常常用到 如UART协议的20mA电流环 对于模拟信号 光耦因为输入输出的线形较差 并且随温度变化较大 限制了
  • python编程题

    7 1 jmu Java Python 统计一段文字中的单词个数并按单词的字母顺序排序后输出 10 分 现需要统计若干段文字 英文 中的不同单词数量 如果不同的单词数量不超过10个 则将所有单词输出 按字母顺序 否则输出前10个单词 注1
  • 【BUUCTF】Web题目 WriteUp

    Web类题目 Basic 极客大挑战 Secret File F12查看源码 发现一个网址 点击查看 进入后 发现转跳连接action php 点击后显示查阅结束 考虑使用burp抓包 直接查看secr3t php 发现flag php 但
  • 如何在 CentOS 里下载 RPM 包及其所有依赖包

    https blog csdn net linuxnews article details 53244315 方法一 利用 Downloadonly 插件下载 RPM 软件包及其所有依赖包 默认情况下 这个命令将会下载并把软件包保存到 va
  • 如何解决深度学习中的过拟合问题?

    在深度学习中 过拟合是一个常见的问题 它指的是模型在训练集上表现良好 但在测试集或新样本上表现较差的现象 过拟合的出现主要是由于模型过度拟合训练数据 过多地记住了训练集中的噪声和细节 导致模型在泛化到未见过的数据时失效 然而 我们可以采取一
  • SpringMVC和SpringBoot接收复杂集合参数,集合对象

    在SpringMVC和SpringBoot中 我们有这样一个场景 就是接受前端复杂的对象数组 或者多个数组 这是我们可以用 RequestBody注解 来解析请求体中的数据 但是值得注意的是在GET请求是不能进行该种方式的操作 因为GET请
  • Kali实现msfvenom在Windows和Linux靶机下后门漏洞

    项目场景 Kali实现msfvenom在Windows和Linux靶机下后门漏洞 情景复现 实验环境 Kali Debian 6 64位 Windows10 Centos7 环境 版本 kali Debian 6 64位 Windows w
  • 五十二.L1-063 吃鱼还是吃肉

    include
  • Qt子线程控制主界面UI控件

    在子线程里控制主界面的UI控件有两种方法 第一种是在子线程中发送信号 然后在主线程中去更新 第二种方法是在子线程中创建同样的对象 然后把主界面中控件的指针赋给创建的对象 第一种方法在此不做实例展示 在此通过一个简单的例子展示第二种方法 下面