C++ Qt反射与复制和分配

Ala*_*ing 6 c++ qt copy-constructor assignment-operator qobject

由于QObject文档和许多其他人解释,一个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)
Run Code Online (Sandbox Code Playgroud)

然后,我无法复制Foo:

Foo a;
Foo b;
a = b;
Run Code Online (Sandbox Code Playgroud)

在这种情况下,允许复制和分配的最佳方法是什么?我是否绝对需要编写复制构造函数和赋值运算符?他们会是什么样子?反思仍然有效吗?

ale*_*sdm 14

如果你只对有反思感兴趣

  • 班级名称,
  • 枚举和标志(Q_ENUMS,Q_FLAGS),
  • 班级信息(Q_CLASSINFO),

你可以用Q_GADGET而不是Q_OBJECT:

class Foo {
    Q_GADGET
    Q_ENUMS(Color)
public:
    enum Color { Blue, Red, Pink };
private:
    Color color;
};
Run Code Online (Sandbox Code Playgroud)

这将声明和定义Foo::staticMetaObject.