I've got a lot of code using old enums declared outside of classes, which I would now like to use with Q_ENUM, so that I can use them in object properties and access them with QMetaEnum.

However, Q_ENUM only works on enums declared inside classes. Moving the enum definitions would require me to update tens of thousands of lines of code, so I'm trying to find a way to alias them.


The following doesn't work (on Qt 5.5.1 or 5.6); it compiles, but object->metaObject()->enumeratorCount() reports there are none. The enum values are not in the MOC output.

#include <QObject>

enum OldEnum
{
    VAL1,
    VAL2,
    VAL3
};

class NewEnumWrapper : public QObject
{
    Q_OBJECT

public:
    using Enum = ::OldEnum; // also tried typedef, no change
    Q_ENUM(Enum)
};


The only thing I've found that works is to put the enum inside the class, then alias the type and all the values individually back to the global namespace. This is pretty ugly..

class NewEnumWrapper : public QObject
{
    Q_OBJECT

public:
    enum NewEnumType { V1, V2 };
    Q_ENUM(NewEnumType)
};

typedef NewEnumWrapper::NewEnumType NewEnum;
const auto V1 = NewEnum::V1;
const auto V2 = NewEnum::V2;



Any other ideas?

thanks,
Hamish
_______________________________________________
Interest mailing list
Interest@qt-project.org
http://lists.qt-project.org/mailman/listinfo/interest

Reply via email to