Как определить, что свойство уступать не наследуется от базового класса?

Как определить, что свойство уступать не наследуется от базового класса? Я конвертирую объект в 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);
               }
            }

1 ответ

Решение

Свойства всегда считаются от самых базовых (то есть QObject) к наиболее производному классу (тип экземпляра). Каждый уровень наследования имеет свой QMetaObject и добавляет свойства поверх предыдущих, где подсчет продолжается.

Каждый класс, представленный QMetaObject, имеет смещение свойства (то есть идентификатор первого свойства, введенного этим классом) и количество свойств (то есть идентификатор последнего свойства плюс один). Если вы хотите перебирать только свойства, представленные 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, Однако они не равны, если между ними больше классов.

Другие вопросы по тегам