gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-10-31 02:20:15 25 4
gpt4 key购买 nike

如何判断给定的属性是否继承自基类?我正在将一个对象转换为 QVariantList 并且我想在我的 list 中保留从基类继承的属性,例如 objectName来自 QObject

 QVariantList list;
const QMetaObject *meta = obj->metaObject();
for(int i = 0, len = meta->propertyCount(); i < len; ++i)
{
QMetaProperty prop = meta->property(i);
if(porp isn't inherited from base class) {
const char *name = prop.name();
QVariant value = obj->property(name);
QVariantMap map;
map.insert(name, value);
list.append(map);
}
}

最佳答案

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

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

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

或者,如果您想计算另一个类以来引入的属性,由另一个 QMetaObject *base 表示, 然后从它的 property count 开始计数,因为根据它的定义,这是该类的最后一个属性加上一个等于 least-derived-since-the-base 的第一个属性。

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

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

关于c++ - 如何确定给定的属性是否不是从基类继承的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32960740/

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