我正在一个项目中工作,在我需要继承的类中使用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类应该放在第一位。多级继承是否有类似的东西。
答案 0 :(得分:2)
Q_OBJECT
宏的存在标记了包含在Qt的元对象系统中的类。如果您希望您的类在此元对象系统中拥有自己的标识,则必须将Q_OBJECT
宏放入其中(并确保它直接或间接地从QObject
派生,自然而然)。< / p>
对于cBaseObject
和cEnhancedbaseObject
的情况,如果cEnhancedbaseObject
不包含Q_OBJECT
宏,它仍然可以正常工作。但是,就Qt的元对象系统而言,cEnhancedbaseObject
类型的对象将属于元类型cBaseObject
。您可以看到使用myObject->metaObject()->className()
等函数。