gpt4 book ai didi

c++ - Q_OBJECT 和 moc 用于继承

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:08:45 31 4
gpt4 key购买 nike

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

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

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

我正在通过 cBaseObject 的公共(public)继承创建一个新类。我是否需要再次编写 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,自然而然)。

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

关于c++ - Q_OBJECT 和 moc 用于继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34159252/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com