在qt中使用信号槽时,qt给的数据类型很明显得不满足我们的要求,那么我们得去自定义一个数据类型,来满足我们的开发需求。
一:#include<QMetaType>
二:Q_DECLARE_METATYPE(ClassType)// 最好用在类或者结构体下面 这个声明主要是为了让qt所有模板都知道这个类型
三:qRegisterMetaType<ClassType>("ClassType")//进行注册 注意:这个函数一定要用在调用或者绑定信号槽前
使用抽象代码
#include<QMetatype>//声明
#include<QMap>
struc information{
QString name;
int age;
};
Q_DECLARE_METATYPE(information) //让全世界的模板都知道这个数据类型的存在,如果注册QMap,QList...qt自身的的数据类型,则可以不用调用这个宏,直接注册就行。否则,必须调用该宏。
Class A(){
Q_Object
A(){
qRegisterMetaType<information>("information") //进行自定义的类进行注册
qRegisterMetaType<QMap<QString,QString>>("QMap<QString,QString>") //进行qt本身的类进行注册
public:
sender()
{
connect(this,SIGNAL(sent(QMap<QString,QString>)),SLOT(receive(QMap<QString,QString>)));//绑定
QMap<QString,QString> data;
emit sent(data);//发送信号
}
signals:
void sent(QMap<QString,QString>);
public slots:
void receive(QMap<QString,QString>){}
}