[solved] Registering an ENUM in QML
-
Dear all,
In the Qt documentation it is explained that enumerated types defined in a QObject derived class could be used in QML. However there is no sample of how to do the registration call per se. Could you provide a sample ?
Also, it is possible to register uncreatable types. They are referring to enum types or a QObject derived class? Which are the requirements of theses classes? Could you provide a sample?
Joaquim Duran
-
Hi, to register an enum you can simply use the "Q_ENUMS":http://qt-project.org/doc/qt-5/qobject.html#Q_ENUMS macro, e.g.
@
class Test : public QObject
{
Q_OBJECT
Q_ENUMS(TestEnum)
Q_PROPERTY(TestEnum testEnum READ getTestEnum WRITE setTestEnum NOTIFY testEnumChanged)public:
explicit Test(QObject *parent = 0);enum class TestEnum { One, Two, Three }; // getter, setter and signal omitted
private:
TestEnum m_testEnum;
};
@
if you register this Test class to the QML engine you can just access the enum property and use it like Test.One etc.
There might be one drawback, as far as I know enums are still converted to integer values, so you can't print the string value in QML, just the int :(
I mean if you have a QML object of Test and you do this:
@
console.log(test.testEnum)
@
you will only see 0, 1 or 2 and not One, Two or Three sadlyfor you second question you can simply use "qmlRegisterUncreatableType":http://qt-project.org/doc/qt-5/qqmlengine.html#qmlRegisterUncreatableType or maybe better "qmlRegisterSingletonType":http://qt-project.org/doc/qt-5/qqmlengine.html#qmlRegisterSingletonType if you need a single object.
-
Xander84, your sample about enumerations it has been very useful.
To access to the enumerated value is done in the same way as accessing to a property.
Test {
testEnum: Test.One
}Joaquim Duran