[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