Этот вопрос о том, чтобы выявить переход C ++ на Qml из не Qubject и специфически для Qt 6.2 и выше , где рекомендуемый метод регистрации QML, такие как C ++, такие как QMLEREGIST QML_ELEMENT .
Я хочу разоблачить перечисление в QML из C ++ без создания QObject, но он не работает для меня. Есть идеи? Я также пытался использовать пространство имен с помощью Q_NAMESPACE () и Q_ENUM_NS () . В обоих случаях перечисление не распознается QML.
Полный QBject QML_ELEME Пример
Код: Выделить всё
#include
#include
class MyFullQObject : public QObject {
Q_OBJECT
QML_ELEMENT
public:
using QObject::QObject;
enum MyEnum {
First,
Second,
Third
};
Q_ENUM(MyEnum)
};
Код: Выделить всё
#include
class MyGadget {
Q_GADGET
public:
enum MyEnum {
First,
Second,
Third
};
Q_ENUM(MyEnum)
};
Код: Выделить всё
#include
namespace MyNamespace {
Q_NAMESPACE
enum MyEnum {
First,
Second,
Third
};
Q_ENUM_NS(MyEnum)
}
import QtQuick
import MyModule
Item {
Component.onCompleted: {
console.log("MyFullQObject enum: " + MyFullQObject.First)
console.log("MyGadget enum: " + MyGadget.First)
console.log("MyNamespace enum: " + MyNamespace.First)
}
}
< /code>
В QML будет работать первая консольная линия. Второй генерирует ошибку «Ссылкаерр: Mygadget не определен». Аналогично для третьего (если второй прокомментирован, чтобы позволить программе продолжаться).
В Cmake, как классы, так и пространство имен включены в один и тот же модуль Cmake, и я связываю сгенерированный mymoduleLibplugin с исполняемым, который успешно делает его доступным для QML .>
Подробнее здесь: https://stackoverflow.com/questions/764 ... qobject-in
Мобильная версия