总结 通过上述步骤,你可以在Qt中将QMetaTypeId赋值到enum类型,并在Qt的元对象系统中使用它。这通常涉及到定义枚举类型、使用Q_DECLARE_METATYPE宏注册类型、在应用程序初始化时调用qRegisterMetaType函数,以及使用QMetaType::type()或qMetaTypeId<T>()函数获取类型ID。
1、enum QAbstractAnimation::DeletionPolicy KeepWhenStopped:动画对象在停止时不会被删除。 DeleteWhenStopped:动画对象停止时会自动删除。 2、enum QAbstractAnimation::Direction:此枚举描述处于运行状态时动画的方向。 Forward:动画的当前时间随时间增加(即从 0 向结束/持续时间移动)。 Backward:动画的当前时间随时间减...
Q_DECLARE_METATYPE(MyClass::MyEnum) 注意,如果你打算在QML中使用该枚举,还需要使用qRegisterMetaType或Q_DECLARE_METATYPE来注册枚举类型。 Q_FLAG Q_FLAG宏用于将一组可以组合的标志注册到Qt的元对象系统中。这些标志通常定义为枚举类型,其中每个值都是2的幂次方,以便可以使用按位或(OR)操作来组合它们。 示例代...
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; QVariantvar;var.setValue(s);// copy s into ...
简介:Qt信号槽使用结构体作为参数:Q_DECLARE_METATYPE和qRegisterMetaType的作用 问题由来 定义一个结构体 struct myStruct { int a; float b; }; 通过信号槽传递该结构体 connect(this, SIGNAL(m_signal(myStruct)), this, SLOT(m_slot(myStruct))); ...
这个宏用来注册一个类(含默认构造、默认析构、拷贝构造函数)为QMetaType类型 ,注册后的类型可以作为QVariant的自定义类型。 这个宏应该放在类或者结构体外面的下面,也可以放在一个非公用引用的头文件里,在每次使用QVariant的时候引用该头文件。 想在信号队列、槽、 QObject’s property system中使用该类型,还得用...
解决方法嘛,当然很简单:参照Q_DECLARE_METATYPE的宏定义,自己把它展开,编译器就不会再犯傻了。 [cpp]view plaincopy QT_BEGIN_NAMESPACE template <> struct QMetaTypeId< QMap<QString, bool> > { enum { Defined = 1 }; static int qt_metatype_id() ...
Q_DECLARE_METATYPE 代码来源:src/corelib/kernel/qmetatype.h #define Q_DECLARE_METATYPE(TYPE) \ 1. QT_BEGIN_NAMESPACE \ 1. template <> \ 1. struct QMetaTypeId< TYPE > \ 1. { \ 1. enum { Defined = 1 }; \ 1. static int qt_metatype_id() \ ...
。也就是说,QVariant提供了一组预定义的构造函数。不能使用Q_DECLARE_METATYPE宏添加新的宏。
代码来源:src/corelib/kernel/qmetatype.h #define Q_DECLARE_METATYPE(TYPE) \ QT_BEGIN_NAMESPACE \ template <> \ struct QMetaTypeId< TYPE > \ { \ enum { Defined = 1 }; \ static int qt_metatype_id() \ { \ static QBasicAtomicInt metatype_id = Q_BASIC_ATOMIC_INITIALIZER(0); \...