如果只是想在同一线程内的信号和槽或者使用 QVariant 存储自定义类型的话,通常只需要 Q_DECLARE_METATYPE 宏。 此外,qRegisterMetaType 还使得自定义类型可用于QMetaObject中的类型信息,比如QObject::property(),QObject::setProperty(),以及QMetaProperty::read()和QMetaProperty::write()这些反射相关的函数。 4 总...
例如,当你定义了一个自定义结构体MyStruct并使用Q_DECLARE_METATYPE(MyStruct)声明后,Qt在编译阶段就知道了这个类型可以用于元对象相关的操作。 qRegisterMetaType则是在运行时对类型进行注册。它建立在Q_DECLARE_METATYPE的基础之上。也就是说,只有当一个类型已经通过Q_DECLARE_METATYPE进行了声明,才能使用qRegisterMetaT...
摘自版本路径(C:\Qt\Qt5.7.1\5.7\msvc2013\include\QtCore\qmetatype.h) #define Q_DECLARE_METATYPE(TYPE) Q_DECLARE_METATYPE_IMPL(TYPE) #define Q_DECLARE_METATYPE_IMPL(TYPE) \ QT_BEGIN_NAMESPACE \ template <> \ struct QMetaTypeId< TYPE > \ { \ enum { Defined = 1 }; \ static i...
} Q_DECLARE_METATYPE(A::Test) 今天遇到了莫名其妙的编译错误,原因是我用QVariant设置一个自定义指针类型的Data,这时就需要Q_DECLARE_METATYPE(Type*)了,如果设置了Q_DECLARE_METATYPE(Type),Qt只能识别Type类型,而未能识别其指针类型!!! 另外自定义类型中一定要有默认构造函数,如果已经显式的定义了带有无默认...
简介:Qt信号槽使用结构体作为参数:Q_DECLARE_METATYPE和qRegisterMetaType的作用 问题由来 定义一个结构体 struct myStruct { int a; float b; }; 通过信号槽传递该结构体 connect(this, SIGNAL(m_signal(myStruct)), this, SLOT(m_slot(myStruct))); ...
Q_DECLARE_METATYPE(Type) 使用的具体步骤如下: 第一步: 定义类型,并注册 //自定义类型 class Animal { public: Animal(){} //必须要有默认构造函数 //拷贝构造函数也必须有,不过没有深、浅拷贝时,用默认的即可 Animal(QString name):_name(name){} ...
Q_DECLARE_METATYPE(MyStruct) 1. 2. 3. 4. 5. 6. 7. 在实际代码中,自己手动添加构造函数、拷贝构造函数、析构函数也是可以的例如: 头文件 #ifndef USER_H #define USER_H #include<QObjectUserData> structUserTest:publicQObjectUserData {
。也就是说,QVariant提供了一组预定义的构造函数。不能使用Q_DECLARE_METATYPE宏添加新的宏。
1.使用Q_DECLARE_METATYPE标记自定义类型; 代码语言:javascript 复制 #include<QMetaType>struct MyStruct{QString name;QString color;};Q_DECLARE_METATYPE(MyStruct) 2.在main函数中使用qRegisterMetaType注册自定义类型到元对象系统中。 代码语言:javascript ...
youalsohavetocallqRegisterMetaType()sincethenamesareresolvedatruntime. classBH{ public: BH(){ value=10; } intvalue; }; Q_DECLARE_METATYPE(BH) BHbh; QVariantvar=QVariant::fromValue(bh); qDebug()<<var.canConvert<BH>(); BHbh2=var.value<BH>(); qDebug()<<bh2.value;...