我在一个需要继承的类中使用Q_OBJECT宏的项目中工作。
已经定义Q_OBJECT的类如下所示,
class cBaseObject : public QObject, public cinformation
{
Q_OBJECT
//...
//...
}我正在通过cBaseObject的公共继承创建一个新类。我还需要再写一次Q_OBJECT宏吗?我尝试使用和不使用这个宏,如果我没有包含moc_XXX.cxx文件,就不会生成任何QT_MACRO文件。
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类应该放在第一位。对于多级继承是否有类似之处。
发布于 2015-12-08 15:13:35
Q_OBJECT宏的存在标志着类包含在Qt的元对象系统中。如果您希望类在这个元对象系统中具有自己的标识,则必须将Q_OBJECT宏放入其中(并确保它自然是直接或间接从QObject派生的)。
在cBaseObject和cEnhancedbaseObject的例子中,如果cEnhancedbaseObject不包括Q_OBJECT宏,它仍将正常工作。然而,就Qt的元对象系统而言,cEnhancedbaseObject类型的对象将是元类型的cBaseObject.您可以看到,使用像myObject->metaObject()->className()这样的函数。
https://stackoverflow.com/questions/34159252
复制相似问题