Qt::Q_DECLARE_METATYPE 本是古典 何须时尚 2022-07-13 12:39 128阅读 0赞 ### 简介 ### 这个宏用来注册一个类(含默认构造、默认析构、拷贝构造函数)为QMetaType类型 ,注册后的类型可以作为QVariant的自定义类型。 这个宏应该放在类或者结构体外面的下面,也可以放在一个非公用引用的头文件里,在每次使用QVariant的时候引用该头文件。 想在信号队列、槽、 QObject’s property system中使用该类型,还得用qRegisterMetaType()注册该类型。 ### 示例 ### struct MyStruct { int i; ... }; Q_DECLARE_METATYPE(MyStruct) 有命名空间, Q\_DECLARE\_METATYPE() 宏应该放在命名空间外面 namespace MyNamespace { ... } Q_DECLARE_METATYPE(MyNamespace::MyStruct) Since MyStruct is now known to QMetaType, it can be used in QVariant: MyStruct s; QVariant var; var.setValue(s); // copy s into the variant // retrieve the value MyStruct s2 = var.value<MyStruct>(); ### 注意 ### 一些类型是自动注册的,不在需要用此宏去申明类型 1. 继承自QObject的指针类型 2. QList, QVector, QQueue, QStack, QSet or QLinkedList中已经注册的元类型T 3. QHash < T1, T2 >, QMap< T1, T2 > or QPair< T1, T2 > 中已经注册的元类型T1 T2 4. QPointer< T >, QSharedPointer< T >, QWeakPointer< T > 继承自QObject的类 5. Q\_ENUM 或 Q\_FLAG注册的枚举类型 6. 包含Q\_GADGET macro的类
还没有评论,来说两句吧...