c – 继承的Q_OBJECT和moc

我正在一个项目中工作,在我需要继承的类中使用Q_OBJECT宏.

已定义Q_OBJECT的类看起来像这样,

class cBaseObject : public QObject, public cinformation
{
    Q_OBJECT
    //...
    //...
}

我正在通过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
} 

但是当我继承类时,为什么Q_OBJECT宏的功能也没有被继承.
如果Q_OBJECT宏被定义两次,如果它被继承,是否有任何问题? Q_OBJECT的行为如何进行多级继承.我已经读过,对于多重继承,QOBJECT类应该放在第一位.多级继承有什么类似的东西吗?

最佳答案 Q_OBJECT宏的存在标记了包含在Qt的元对象系统中的类.如果您希望您的类在此元对象系统中具有自己的标识,则必须将Q_OBJECT宏放入其中(并确保它直接或间接地从QObject派生,当然).

在cBaseObject和cEnhancedbaseObject的情况下,如果cEnhancedbaseObject不包含Q_OBJECT宏,它仍然可以正常工作.但是,就Qt的元对象系统而言,cEnhancedbaseObject类型的对象将是元类型的cBaseObject.您可以看到使用myObject-> metaObject() – > className()等函数.

点赞