Как правильно использовать класс перечисления С++ в QML? ⇐ C++
-
Anonymous
Как правильно использовать класс перечисления С++ в QML?
У меня есть небольшой проект Qt/QML, в котором я пытаюсь использовать класс перечисления C++.
main.cpp
int main(int argc, char *argv[]) { qmlRegisterUncreatableType("FruitShop", 1, 0, "FruitShop", QStringLiteral("Sume shop")); qRegisterMetaType(); #if QT_VERSION < QT_VERSION_CHECK(6, 0, 0) QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling); #endif Приложение QGuiApplication (argc, argv); Движок QQmlApplicationEngine; shop::Установщик FruitSetter; engine.rootContext()->setContextProperty("_fruitSetter", &setter); ... fruitshop.h
#include магазин пространства имен { класс FruitShop: публичный QObject { Q_OBJECT публика: класс перечисления Фрукты { Апельсин, Яблоко, Груша }; Q_ENUM(Фрукты) явный FruitShop (QObject *parent = nullptr); }; } // магазин пространства имен fruitsetter.h
#include #include "fruitshop.h" магазин пространства имен { класс FruitSetter: публичный QObject { Q_OBJECT публика: явный FruitSetter(QObject *parent = nullptr); Q_INVOKABLE void setFruit(FruitShop::Fruit Fruit); }; } // магазин пространства имен main.qml
импортировать QtQuick 2.15 импортировать QtQuick.Controls 2.15 импортировать QtQuick.Window 2.15 импортировать FruitShop 1.0 Окно { ширина: 640 высота: 480 видно: правда title: qsTr("Привет, мир") Кнопка { якоря.centerIn: родительский текст: «Набор фруктов» onClicked: {_fruitSetter.setFruit(FruitShop.Apple)} } } Если я использую без namespace shop, все ок. Но если я использую код, представленный выше, я получаю ошибку
qrc:/main.qml:16: Ошибка: Неизвестный тип параметра метода: FruitShop::Fruit
Как решить эту проблему?
У меня есть небольшой проект Qt/QML, в котором я пытаюсь использовать класс перечисления C++.
main.cpp
int main(int argc, char *argv[]) { qmlRegisterUncreatableType("FruitShop", 1, 0, "FruitShop", QStringLiteral("Sume shop")); qRegisterMetaType(); #if QT_VERSION < QT_VERSION_CHECK(6, 0, 0) QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling); #endif Приложение QGuiApplication (argc, argv); Движок QQmlApplicationEngine; shop::Установщик FruitSetter; engine.rootContext()->setContextProperty("_fruitSetter", &setter); ... fruitshop.h
#include магазин пространства имен { класс FruitShop: публичный QObject { Q_OBJECT публика: класс перечисления Фрукты { Апельсин, Яблоко, Груша }; Q_ENUM(Фрукты) явный FruitShop (QObject *parent = nullptr); }; } // магазин пространства имен fruitsetter.h
#include #include "fruitshop.h" магазин пространства имен { класс FruitSetter: публичный QObject { Q_OBJECT публика: явный FruitSetter(QObject *parent = nullptr); Q_INVOKABLE void setFruit(FruitShop::Fruit Fruit); }; } // магазин пространства имен main.qml
импортировать QtQuick 2.15 импортировать QtQuick.Controls 2.15 импортировать QtQuick.Window 2.15 импортировать FruitShop 1.0 Окно { ширина: 640 высота: 480 видно: правда title: qsTr("Привет, мир") Кнопка { якоря.centerIn: родительский текст: «Набор фруктов» onClicked: {_fruitSetter.setFruit(FruitShop.Apple)} } } Если я использую без namespace shop, все ок. Но если я использую код, представленный выше, я получаю ошибку
qrc:/main.qml:16: Ошибка: Неизвестный тип параметра метода: FruitShop::Fruit
Как решить эту проблему?
Мобильная версия