将结构体数组类型数据从子线程传到主线程

将结构体数组类型数据从子线程传到主线程


定义结构体数组的.h文件

// 需要传的结构体数组
#ifndef STRUCT_H
#define STRUCT_H

typedef struct msg {
    int value;
    int  seq;
} __attribute__((packed)) msg;

#endif // STRUCT_H

子线程头文件定义

#ifndef LIDAR_H
#define LIDAR_H

#include <QThread>	
#include "struct.h"
// 定义一个结构体 将需要传递结构体数组放入这个结构体中
struct pack{
    msg info[2];	//定义一个结构体数组
};
class TestThread : public QThread{
    Q_OBJECT
public:
    TestThread();

protected:
        void run() Q_DECL_OVERRIDE;

signals:
        void TestSignal(pack);		// 自定义信号函数
};
#endif // LIDAR_H

子线程cpp文件

#include "lidar.h"
#include <QTime>
pack p;		// 定义一个结构体
TestThread::TestThread(){

}
void TestThread::run(){

    p.info[0].seq = 1;
    p.info[0].value = 1;
    p.info[1].seq = 2;
    p.info[1].value = 2;

    while (1) {
        emit TestSignal(p);		// 发射信号
        msleep(500);
    }

}

主线程.h文件

#ifndef DIALOG_H
#define DIALOG_H

#include <QDialog>
#include "lidar.h"
namespace Ui {
class Dialog;
}

class Dialog : public QDialog
{
    Q_OBJECT
private:
    TestThread threadA;	
public:
    explicit Dialog(QWidget *parent = 0);
    ~Dialog();
private slots:
    void TestSlot(pack);		// 定义的槽函数
private:
    Ui::Dialog *ui;
};

#endif // DIALOG_H

主线程cpp文件

#include "dialog.h"
#include "ui_dialog.h"
#include <QDebug>
Dialog::Dialog(QWidget *parent) :
    QDialog(parent),
    ui(new Ui::Dialog)
{
    ui->setupUi(this);
    qRegisterMetaType<pack>("pack");	// 将保存结构体数组的结构体注册
    connect(&threadA,SIGNAL(TestSignal(pack)),this,SLOT(TestSlot(pack)));
    threadA.start();
}

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

void Dialog::TestSlot(pack p){
    for(int i=0;i<2;i++){
        qDebug()<<p.info[i].seq;
        qDebug()<<p.info[i].value;
    }
}

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值