首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用于继承的Q_OBJECT和moc

用于继承的Q_OBJECT和moc
EN

Stack Overflow用户
提问于 2015-12-08 15:07:19
回答 1查看 2.1K关注 0票数 7

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

已经定义Q_OBJECT的类如下所示,

代码语言:javascript
复制
class cBaseObject : public QObject, public cinformation
{
    Q_OBJECT
    //...
    //...
}

我正在通过cBaseObject的公共继承创建一个新类。我还需要再写一次Q_OBJECT宏吗?我尝试使用和不使用这个宏,如果我没有包含moc_XXX.cxx文件,就不会生成任何QT_MACRO文件。

代码语言:javascript
复制
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类应该放在第一位。对于多级继承是否有类似之处。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-12-08 15:13:35

Q_OBJECT宏的存在标志着类包含在Qt的元对象系统中。如果您希望类在这个元对象系统中具有自己的标识,则必须将Q_OBJECT宏放入其中(并确保它自然是直接或间接从QObject派生的)。

cBaseObjectcEnhancedbaseObject的例子中,如果cEnhancedbaseObject不包括Q_OBJECT宏,它仍将正常工作。然而,就Qt的元对象系统而言,cEnhancedbaseObject类型的对象将是元类型的cBaseObject.您可以看到,使用像myObject->metaObject()->className()这样的函数。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34159252

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档