Qt:No hay metadatos de meta.enumeratorCount() para enumeración en Q_OBJECT, ¿por qué?

StackOverflow https://stackoverflow.com//questions/11679057

  •  12-12-2019
  •  | 
  •  

Pregunta

Tengo la siguiente clase, donde trato de obtener algunos metadatos de un enum MyEnum.Sin embargo, al recorrer meta.enumeratorCount() su recuento es siempre 0.Básicamente estaba siguiendo este ejemplo aquí.Para encontrar el problema, también intenté lo mismo con los métodos, el mismo problema: recuento de métodos 0.El código se compila, sin errores ni advertencias.

Debe ser un error tonto....Quizás podrías ayudarme

class FsxSimConnectQtfier : public QObject
{
    Q_OBJECT
public:
    explicit FsxSimConnectQtfier(QObject *parent = 0);
    enum MyEnum { G1, G2 };
    static const QString simConnectExceptionToString(const DWORD id);
};

const QString FsxSimConnectQtfier::simConnectExceptionToString(const DWORD id) {
    // int i= FsxSimConnectQtfier::staticMetaObject.indexOfEnumerator("MyEnum");
    // -1 -> not found, why?
    QMetaObject meta = FsxSimConnectQtfier::staticMetaObject;
    for (int i=0; i < meta.enumeratorCount(); ++i) {
        QMetaEnum m = meta.enumerator(i); // never reached, why?
    }
    return "";
}
¿Fue útil?

Solución

Debe registrar la enumeración con el sistema de metadatos usando el Q_ENUMS() macro:

class FsxSimConnectQtfier : public QObject
{
    Q_OBJECT
    Q_ENUMS(MyEnum)  // <--- 

public:
    explicit FsxSimConnectQtfier(QObject *parent = 0);
    enum MyEnum { G1, G2 };
    static const QString simConnectExceptionToString(const unsigned int id);
};
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top