Для того, чтобы использовать в QML перечисления enum, прописанные в C++, необходимо создать класс, наследованный от QObject, и зарегистрировать его в качестве QML Type перед запуском QML движка в приложении.
Для изучения создайте проект с использованием QtQuick.
Минимальный вариант такого класса с перечислениям будет следующим:
#ifndef INFO_H #define INFO_H #include <QObject> class Info : public QObject { Q_OBJECT public: enum State { Information, Debug, Warning, Error }; Q_ENUM(State) }; #endif // INFO_H
Далее необходимо зарегистрировать этот класс в качестве QML Type в функции main. Для этого понадобится заголовочный файл QtQml и функция qmlRegisterType.
#include <QGuiApplication> #include <QQmlApplicationEngine> #include <QtQml> // Подключить QtQml для использования qmlRegisterType #include "info.h" // Подключить заголовочный файл класса Info int main(int argc, char *argv[]) { QGuiApplication app(argc, argv); qmlRegisterType<Info>("info", 1, 0, "Info"); // Зарегистрировать данный класс в качестве модуля QQmlApplicationEngine engine; engine.load(QUrl(QStringLiteral("qrc:/main.qml"))); if (engine.rootObjects().isEmpty()) return -1; return app.exec(); }
После чего останется только подключить новый QML модуль в файле main.qml и воспользоваться перечислениями для отображения текста. Будем выводить сообщение "Message 0", "Message 1" и т.д. Числа будут взяты из перечислений.
import QtQuick 2.5 import QtQuick.Window 2.2 import QtQuick.Controls 1.4 import info 1.0 // Подключить модуль Window { visible: true width: 360 height: 360 title: qsTr("Enumeration") ListView { anchors.fill: parent delegate: Item { height: 48 width: parent.width Text { anchors.fill: parent text: "Message " + model.text verticalAlignment: Text.AlignVCenter horizontalAlignment: Text.AlignHCenter } } model: ListModel { // Воспользоваться перечислениями из C++ ListElement {text: Info.Information} ListElement {text: Info.Debug} ListElement {text: Info.Warning} ListElement {text: Info.Error} } } }
Внешний вид приложения будет следующим: