Qt信号与槽自定义参数需注册
背景:一个线程通过signal-slot发送PVCI_CAN_OBJ类型的值到主线程中,
错误提示:
QObject::connect: Cannot queue arguments of type 'PVCI_CAN_OBJ'
(Make sure 'PVCI_CAN_OBJ' is registered using qRegisterMetaType().)
原因:在线程中通过signal-slot传递信息时,参数默认放到队列中的,但PVCI_CAN_OBJ是自定义的参数,不是Qt自带的参数结构。
解决方法:
一、将不识别的参数结构进行注册,让Qt能够识别。
包含头文件
#include <QMetaType>在构造函数中调用其方法完成注册:
qRegisterMetaType<PVCI_CAN_OBJ>("PVCI_CAN_OBJ");//注册PVCI_CAN_OBJ类型
二、使用QVariant
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>();
长风破浪会有时,直挂云帆济沧海!
可通过下方链接找到博主
https://www.cnblogs.com/judes/p/10875138.html