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
_______________________________________________ Interest mailing list Interest@qt-project.org http://lists.qt-project.org/mailman/listinfo/interest