我有一个使用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。

09-10 00:21
查看更多