2016-02-24 12 views
1

Определить функцию «Я не могу реорганизовать. Но нужно использовать в тестовом классе. Используется Qt 4.8. Следующий код возвращает 1, но ожидается 2.Qt4.8: Почему перечисление не видно в qmetaobject? И как работать?

Как использовать typedef enum в тестовом классе?

#include <QDebug> 
#include <QObject> 

#include <QMetaEnum> 

typedef enum { 
    READ = 0x30, 
    AUTH = 0x40, 
    EJECT = 0x55 
}__attribute__ ((packed)) function; 

class test : public QObject 
{ 
    Q_OBJECT 
public: 
    explicit test(QObject *parent = 0){ 
    qDebug() << "Enums count=" << this->metaObject()->enumeratorCount(); 
    qDebug() << "Functions=" << this->metaObject()->enumerator(this->metaObject()->indexOfEnumerator("function")).keyCount(); 
    qDebug() << "worked=" << this->metaObject()->enumerator(this->metaObject()->indexOfEnumerator("worked")).keyCount(); 
    } 
    Q_ENUMS(function) 

    enum worked{forexample}; 
    Q_ENUMS(worked) 
}; 

ответ

1

typedef конструкция не обязательно в коде C++, и это относится к перечислениям вне классов, тоже. Но это не ваша проблема; перечисление должно быть членом подкласса QObject, который будет использоваться с metaObject, как вы уже протестировали с помощью enum worked.

Дополнительная информация: http://doc.qt.io/qt-4.8/qobject.html#Q_ENUMS