QT 6.2+: Использование новых макросов, как вы подвергаете Enum в QML из Non QBject в C ++C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 QT 6.2+: Использование новых макросов, как вы подвергаете Enum в QML из Non QBject в C ++

Сообщение Anonymous »

более ранний вопрос задал вопрос, как получить доступ к C ++ Enum из QML? Что касается QObject.
Этот вопрос о том, чтобы выявить переход 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)
};
q_gadget Пример

Код: Выделить всё

#include 

class MyGadget {
Q_GADGET
public:
enum MyEnum {
First,
Second,
Third
};
Q_ENUM(MyEnum)
};
q_namespace Пример

Код: Выделить всё

#include 

namespace MyNamespace {

Q_NAMESPACE

enum MyEnum {
First,
Second,
Third
};
Q_ENUM_NS(MyEnum)

}
Использование в qml
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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»