C Qt反射与复制和分配

前端之家收集整理的这篇文章主要介绍了C Qt反射与复制和分配前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
正如 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.

猜你在找的C&C++相关文章