我有一个使用Q_PROPERTY
创建属性的类。我还在类定义的开头定义了Q_OBJECT
。但是,我没有继承QObject
,因为这使该类不可复制,这使我到处都有编译错误。我真的需要继承QObject
才能使Q_PROPERTY
工作吗?在那种情况下-我能以某种方式解决不可复制的问题吗?
最佳答案
Qt Q_PROPERTY是否要求我的类继承QObject?
简单的答案是:如果使用Q_OBJECT,则为是,如果使用Q_GADGET,则为否。
要提供Q_PROPERTY(作为QML中的属性)或Q_INVOKABLE作为(QML中的可调用方法),您需要能够处理反射的对象。它可以通过Q_OBJECT(需要QObject作为类父类)或Q_GADGET(不需要QObject作为类父类)来实现。
http://doc.qt.io/qt-5/qobject.html#Q_GADGET
Q_GADGET
Q_GADGET宏是Q_OBJECT宏的简化版本,用于
不从QObject继承但仍要使用其中一些功能的类
QMetaObject提供的反射功能。就像
Q_OBJECT宏,它必须出现在类的私有部分中
定义。
Q_GADGET可以具有Q_ENUM,Q_PROPERTY和Q_INVOKABLE,但不能
有信号或插槽
Q_GADGET使类成员staticMetaObject可用。
staticMetaObject类型为QMetaObject,并提供对
用Q_ENUMS声明的枚举。
我认为如果您已经有QObject作为父对象,请使用Q_OBJECT宏,然后在需要反射的其余情况下使用Q_GADGET。