【QT】信号槽传递自定义数据结构

本文介绍如何正确地在信号槽机制中传递自定义结构体。通过使用Q_DECLARE_METATYPE宏声明结构体,并利用QVariant进行转换和传递,确保跨线程安全有效地发送和接收数据。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

定义一个结构体

struct myStruct
{
  int a;
  float b;
};

通过信号槽传递该结构体

connect(this, SIGNAL(m_signal(myStruct)), this, SLOT(m_slot(myStruct)));

这样做是行不通的,正确的做法:
通过Q_DECLARE_METATYPE声明自定义的结构体

struct myStruct
{
  int a;
  float b;
};
Q_DECLARE_METATYPE(myStruct);

然后以QVariant代替自定义的结构体

connect(this, SIGNAL(m_signal(QVariant)), this, SLOT(m_slot(QVariant)));

在发射信号前,将自定义结构体打包为QVariant

myStruct mstruct;
QVariant data;
data.setValue(mstruct);
emit signal_child(data);

在槽函数中,解析QVariant

myStruct mstruct = data.value<myStruct>();
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值