如何确定属性是否不是从基类继承的?

时间:2015-10-06 02:21:17

标签: c++ qt properties moc

如何确定属性是否不是从基类继承的?我将对象转换为QVariantList并且我希望从基类中删除list继承的属性,例如来自objectName的{​​{1}} }

QObject

1 个答案:

答案 0 :(得分:2)

属性总是从最基数(即QObject)到最派生类(实例的类型)计算。每个级别的继承都有自己的QMetaObject,并在之前添加属性,继续计数。

每个类(由QMetaObject表示)具有属性 offset (即该类引入的第一个属性的ID)和属性 count (即最后一个属性的ID加1)。如果您只想迭代QMetaObject *meta引入的属性(不包括继承的属性),则从偏移量开始计数:

for(int i = meta->propertyOffset(), len = meta->propertyCount(); i < len; ++i)

或者,如果要计算引入的属性另一个类(由另一个QMetaObject *base表示),则从其属性计数开始计数,因为这样它的定义是该类的最后一个属性加上一个等于最小派生的第一个属性。

for(int i = base->propertyCount(), len = meta->propertyCount(); i < len; ++i)

如果base表示由meta表示的类的直接基类,则上述方法相等。但是,如果中间有更多的课程,则它们不相等。