Qt利用全局变量让主线程和子线程互传数据

该博客介绍了如何在Qt中使用全局变量进行跨线程通信。首先,它展示了如何在头文件中声明全局变量并在CPP文件中定义。接着,创建了一个工作线程子类,子线程通过执行命令检查网络状态并更新全局变量。最后,主线程监听按钮点击事件,当子线程完成工作后,读取全局变量的值并根据网络状态更新界面显示。
摘要由CSDN通过智能技术生成

0x00 创建全局变量

  •  Qt在创建全局变量时,全局变量的声明必须在头(H)文件中,全局变量的定义必须在CPP文件中。
#ifndef GLOBALVAR_H
#define GLOBALVAR_H

struct myData{
    bool networkStatus;
};

//声明全局变量
extern myData bigData;

#endif // GLOBALVAR_H
#include "globalvar.h"

//定义全局变量
myData bigData = {false};

0x01 在子线程中给全局变量赋值

#ifndef WORKTHREAD_H
#define WORKTHREAD_H
#include <QThread>
#include <QProcess>
#include "globalvar.h"

class WorkThread : public QThread
{
    Q_OBJECT
public:
    WorkThread();

private:
    void run() override;
};

#endif // WORKTHREAD_H
#include "workthread.h"

WorkThread::WorkThread()
{

}

void WorkThread::run()
{
    if(QProcess::execute("ping 127.0.0.1 -w 1") == 0){
        bigData.networkStatus = true;
    }else{
        bigData.networkStatus = false;
    }
}

0x02 在主线程读取子线程给全局变量赋的值,进行界面响应处理

#ifndef MAINWIDGET_H
#define MAINWIDGET_H

#include <QWidget>
#include "workthread.h"

QT_BEGIN_NAMESPACE
namespace Ui { class MainWidget; }
QT_END_NAMESPACE

class MainWidget : public QWidget
{
    Q_OBJECT

public:
    MainWidget(QWidget *parent = nullptr);
    ~MainWidget();

private slots:
    void on_btnCheckNetwork_clicked();
    void slotDealData();

private:
    Ui::MainWidget *ui;
    WorkThread* workThread;
};
#endif // MAINWIDGET_H
#include "mainwidget.h"
#include "ui_mainwidget.h"
#include <QtDebug>

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

    workThread = new WorkThread();
}

MainWidget::~MainWidget()
{
    delete ui;
    delete workThread;
}

void MainWidget::on_btnCheckNetwork_clicked()
{
    workThread->start();
    connect(workThread, &WorkThread::finished, this, &MainWidget::slotDealData);
}

void MainWidget::slotDealData()
{
    if(bigData.networkStatus == true){
        ui->lblNetworkStatus->setText("网络正常");
    }else{
        ui->lblNetworkStatus->setText("网络故障");
    }
}

 

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

晓琴儿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值