qt结构体嵌套结构体方法_Qt信号槽使用结构体作为参数

本文介绍了如何在Qt中使用结构体作为信号槽参数,强调了信号参数必须是元对象系统能够识别的类型。通过示例展示了自定义结构体`_ColorBalance`如何注册元类型,解释了`Q_DECLARE_METATYPE`和`qRegisterMetaType`的作用,以及何时和为什么需要使用它们。同时,列举了自动注册元类型的几种情况。
摘要由CSDN通过智能技术生成

信号可以带参数,参数的类型,必须是元对象系统能够识别的类型, 即元类型。

下面这几个类型是自动注册的,不需要使用Q_DECLARE_METATYPE这个宏:

1.QObject继承下来的子类的指针;

2.QList, QVector, QQueue, QStack, QSet or QLinkedList这些T都是自动注册的;

3.QHash, QMap or QPair T1,和T2都是自动注册的;

4.QPointer, QSharedPointer, QWeakPointer这3个T必须是QObject的子类;

5.枚举类型要用Q_ENUM or Q_FLAG;

6.拥有Q_GADGET宏的类。

例如:自定义结构体,connect想通过结构体参数来传递

struct _ColorBalance

{

bool preserve_luminosity;

int cyan_red[3];

int magenta_green[3];

int yellow_blue[3];

};

signals:

void state_changed(_ColorBalance *color_balance);

connect(this, &ColorBalance::state_changed, pic, &Picture::ColorBalance);

如果不注册元类型,编译会报错:

ColorBalance.obj:-1: error: LNK2019: 无法解析的外部符号 "public: void __cdecl Colo

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值