Как обратиться к зарегистрированному Q_ENUM в унаследованном классе? - PullRequest
1 голос
/ 09 апреля 2019

У меня есть следующий класс:

class A : public QObject
{
    Q_OBJECT
public:
    enum testEnum
    {
        one= 1,
        two= 2
    };
    Q_ENUM(testEnum)
};

И у меня есть второй класс, который наследуется от первого класса:

 class B : public A
 {
     Q_OBJECT
 public:
     Q_ENUMS(A::testEnum)
 };

Если я теперь включу класс B в третий класс и попытаюсь использовать

 static int l_enumIdx = B::staticMetaObject.indexOfEnumerator("A::testEnum");

это не удалось! Как я могу зарегистрировать право Q_ENUMS и получить к нему правильный доступ с помощью QMetaObject::indexOfEnumerator()? Или есть лучший способ построить такие структуры перечислений и зарегистрировать их?

1 Ответ

2 голосов
/ 09 апреля 2019

Вам не нужно использовать A:: как часть аргумента indexOfEnumerator(), также из Qt 5.5 вы должны использовать Q_ENUM:

static int l_enumIdx = B::staticMetaObject.indexOfEnumerator("testEnum");
qDebug()<< l_enumIdx;

Выход:

0

Также, если вы зарегистрировали перечисление с помощью Q_ENUM в базовом классе, вам не нужно делать это в производном классе.


Перечисления производного класса совпадают с базовым классом:

qDebug() << (B::testEnum::one == A::testEnum::one);

Выход:

true
...