我正在一个项目中使用Q_OBJECT宏,该类需要继承。
已经定义Q_OBJECT的类如下所示:
class cBaseObject : public QObject, public cinformation
{
Q_OBJECT
//...
//...
}
Run Code Online (Sandbox Code Playgroud)
我正在通过cBaseObject的公共继承创建一个新类。我是否需要再次编写Q_OBJECT宏?我尝试使用和不使用该宏,如果不包含QT_MACRO,则不会生成任何moc_XXX.cxx文件
class cEnhancedbaseObject : public cBaseObject
{
Q_OBJECT // if i didn't include this
//no moc__XXX.cxx file is generated
}
Run Code Online (Sandbox Code Playgroud)
但是当我继承该类时,为什么Q_OBJECT宏的功能也没有被继承。如果Q_OBJECT宏被继承了两次,是否有任何问题?Q_OBJECT的行为如何进行多级继承。我已经读过,对于多重继承,应将QOBJECT类放在首位。是否有类似的多级继承。
Q_OBJECT宏的存在标志着该类包含在 Qt 的元对象系统中。如果您希望您的类在这个元对象系统中拥有自己的身份,您必须将Q_OBJECT宏放入其中(并确保它QObject自然地直接或间接派生自)。
在你的情况下cBaseObject和cEnhancedbaseObject,如果cEnhancedbaseObject不包含Q_OBJECT宏,它仍然会正常工作。然而,就 Qt 的元对象系统而言,类型的对象cEnhancedbaseObject将是元类型的cBaseObject。您可以看到使用诸如myObject->metaObject()->className().