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

定义一个结构体

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();

你可能感兴趣的:(QT)