一、自定义一个结构体,并注册结构体
参考:Qt中自定义结构体的使用_ve2102388688的博客-CSDN博客_qt 结构体
1. 建议把所需的结构体放在一个单独头文件中,防止头文件相互包含
2.向QT声明这个结构体,Q_DECLARE_METATYPE(结构体名),头文件为QMetaType
//SelectedDate.h
#ifndef SELECTEDDATESTRUCT_H
#define SELECTEDDATESTRUCT_H
#include<QString>
#include <QMetaType>
struct SelectedDate{
QString name;
QString sex;
QString age;
};
Q_DECLARE_METATYPE(SelectedDate);//向QT声明该结构体
#endif // SELECTEDDATESTRUCT_H
3. 在main函数中用qRegisterMetaType注册自定义参数的类型
qRegisterMetaType<SelectedDate>("SelectedDate");//注册自定义参数的类型
4.在需要调用结构体的文件中包含头文件(include"SelectedDate.h")即可使用
二、调用结构体并发送结构体数据信号
参考:QT怎么发送带结构体数据的信号?_Licht小粉的博客-CSDN博客_qt udp发送结构体
1.作为信号输出时,不能直接传结构体,需要借助QVariant包装结构体
// .h定义信号
signals: void selectedUser(QVariant userDate);
//.cpp 发送结构体数据信号
{
SelectedDate selectDateStruct; //结构体 对象名;
QVariant varValue;//给结构体赋值
selectDateStruct.name=currentName;
selectDateStruct.age=currentAge;
selectDateStruct.sex=currentSex;
varValue.setValue(selectDateStruct);
emit selectedUser(varValue);}
//接收信号的函数 void receive(QVariant varValue) { similarityInfo stu1; stu1 = varValue.value<similarityInfo>(); //或stu1 = qvariant_cast<similarityInfo>(varValue); }