正如
the
QObject
documentation和许多其他人解释的那样,QObject具有一个标识,因此隐藏了它的复制构造函数和赋值运算符.
但是,我没有从QObject中获取其动态属性功能或信号/插槽功能.我只想要反射,或者能够访问Foo :: staticMetaObject.
class Foo : public QObject { Q_OBJECT Q_ENUMS(Color) public: enum Color { Blue,Red,Pink }; private: Color color; }; Q_DECLARE_MetaTYPE(Foo::Color)
然后,我无法复制Foo:
Foo a; Foo b; a = b;
在这种情况下,允许复制和分配的最佳方法是什么?我是否绝对需要编写复制构造函数和赋值运算符?他们会是什么样子?反思仍然有效吗?
解决方法
如果你只对有反思感兴趣
>班级名称,
>枚举和标志(Q_ENUMS,Q_FLAGS),
>课堂信息(Q_CLASSINFO),
你可以使用Q_GADGET
instead of Q_OBJECT
:
class Foo { Q_GADGET Q_ENUMS(Color) public: enum Color { Blue,Pink }; private: Color color; };
它将声明和定义Foo :: staticMetaObject.