如何确定 give 属性是否不是从基类继承的?
How to determine if give a property isn't inherited from base class?
如何确定是否给属性不是继承自基类?我正在将对象转换为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加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
所代表的类的直接基类,则上述方法相等。但是,如果中间有更多的类,它们就不相等了。
相关文章:
- 派生类是从基类继承 v 指针并仅使用它,还是也有自己的 v 指针?
- C++ - 无法从基类继承 |提供空值
- C++排除通过派生类中的基类继承的类
- 派生类不从基类继承数据成员
- 如何修复从基类继承两次时"error: no matching function for call to"
- C - 从基类继承,成员函数作为模板参数
- 从C++中的基类继承复制/移动构造函数作为构造函数
- 如何从 c++ 基类继承抽象行为
- 将initalizer列表与从空基类继承的结构一起使用
- 在从抽象基类继承的类中添加方法
- 在 C++ 中进行第 n 次继承后停止从基类继承
- std::bad_weak_ptr 从基类继承 std::shared_from_this 时
- 从基类继承私人成员到派生类C
- 从C 中的空基类继承
- 将从基类继承的构造函数与自定义构造函数混合使用
- 创建从基类继承的对象
- 从只有纯虚拟函数的基类继承
- 在发布模式下禁用从C++中的基类继承
- 可以强制从抽象基类继承的类只在基类中定义公共方法吗
- Qt UI 插槽不是由从基类继承的信号调用的