Qt无法继承属性

时间:2017-03-18 17:50:55

标签: c++ qt inheritance

我遇到了财产问题。

所以我有一些类(UML)

POST https://content.googleapis.com/drive/v3/files
Content-Type: application/json

{
  "name": "test123.png"
}

CNode |--CNode2D |--CSprite2D 包含以下属性:

CNode

Q_OBJECT Q_PROPERTY(QString name READ getName WRITE setName) Q_PROPERTY(bool visible READ getVisible WRITE setVisible) Q_PROPERTY(bool enabled READ getEnabled WRITE setEnabled) 有:

CNode2D

Q_OBJECT Q_PROPERTY(float Position_X READ getPosX WRITE setPosX) Q_PROPERTY(float Position_Y READ getPosY WRITE setPosY) Q_PROPERTY(float height READ getHeight WRITE setHeight) 没有...

如果我尝试在CSprite2D

的构造函数中打印出属性
CSprite2D

我只输出for(int i = metaObject()->propertyOffset(); i < metaObject()->propertyCount(); ++i) { qDebug() << metaObject()->property(i).name() << metaObject()->property(i).read(this); }

的属性
CNode2D

这让我觉得Position_X QVariant(float, 7.47779e+21) Position_Y QVariant(float, 4.58827e-41) height QVariant(float, 0) 没有继承CNode2D的属性......

只有CNode继承自CNode

如果我继承了QObject中的其他两个类,我会向我抛出编译错误。

我是Qt的新手,所以我可能忘记了一些重要的事情,在这种情况下,抱歉。

编辑:这是类定义(我删除了包含):

QObject

1 个答案:

答案 0 :(得分:3)

刚试了一些代码,因为我很好奇:

你必须添加另一个循环来访问超类的属性,如:

for(int i = metaObject()->superClass()->propertyOffset(); i < metaObject()->superClass()->propertyCount(); ++i)
{
      qDebug() << metaObject()->superClass()->property(i).name() << metaObject()->superClass()->property(i).read(this);
}

只调用metaObject()只访问派生实例而不访问父项。