[Interest] Free Enum registration

Eric Lemanisser eric.lemanissier at gmail.com
Fri Nov 4 17:25:42 CET 2016


Hello,

How is it possible to register free enum types with the meta-object system ?
I always get QMetaProperty.isEnumType() false and
QMetaProperty.enumerator().isValid() false, and as a consequence
QMetaProperty.read() returns a variant without a value.

Here is a sample test code:

#include <qmetaobject.h>


enum FreeEnum

{

    freeEnumVal1

};

Q_DECLARE_METATYPE(FreeEnum)


class ObjectWithEnums: public QObject

{

    Q_OBJECT

    Q_PROPERTY(FreeEnum freeEnum MEMBER freeEnum)

    Q_PROPERTY(NestedEnum nestedEnum MEMBER nestedEnum)


    Q_DISABLE_COPY(ObjectWithEnums)

public:

    ObjectWithEnums() = default;

    enum NestedEnum

    {

        nestedEnumVal1

    };

    Q_ENUM(NestedEnum)

    Q_ENUM(FreeEnum)


    FreeEnum freeEnum;

    NestedEnum nestedEnum;


};

#include <qdebug.h>

int main(int , char *[])

{

    auto metaObject = ObjectWithEnums::staticMetaObject;

    ObjectWithEnums g;

    g.freeEnum = freeEnumVal1;

    g.nestedEnum = ObjectWithEnums::nestedEnumVal1;

    for(auto propName : {"nestedEnum", "freeEnum"})

    {

        auto prop = metaObject.property(metaObject.indexOfProperty(propName));

        qDebug() << prop.name() << (prop.isEnumType() ? "isEnumType" :
"isNOTEnumType") << prop.type() << prop.typeName() << prop.userType();

        auto metaEnum = prop.enumerator();

        qDebug() << (metaEnum.isValid() ? "metaEnumIsValid" :
"metaEnumIsNOTValid") << metaEnum.keyCount() << metaEnum.name() <<
metaEnum.scope();

        qDebug() << prop.read(&g) << '\n';

    }

    return 0;

}


The output is the following:
nestedEnum isEnumType QVariant::int NestedEnum 2
metaEnumIsValid 1 NestedEnum ObjectWithEnums
QVariant(int, 0)

freeEnum isNOTEnumType QVariant::FreeEnum FreeEnum 1024
metaEnumIsNOTValid 0
QVariant(FreeEnum, )

Thanks !

Eric Lemanissier
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.qt-project.org/pipermail/interest/attachments/20161104/20f6f358/attachment.html>


More information about the Interest mailing list