Горячая, чтобы сделать переменную Qt QML доступной где угодно - PullRequest
0 голосов
/ 14 февраля 2019

Привет, я хотел бы, чтобы QT QML-переменная была доступна по всему миру и где-либо еще в моих файлах qml.Это возможно?

Я знаю, что после создания переменной в объекте c ++ можно получить доступ в QML, открыв его функцию getter, но это работает, только если вы знаете тип данных, например string, int, bool.

Существует ли тип (или класс) переменной, который может обрабатывать переменную QML в c ++, так что я могу вызывать ее только в других частях файлов QML

спасибо

1 Ответ

0 голосов
/ 14 февраля 2019

Как сказал Амфасис, вы можете использовать rootContext, чтобы вы могли получить к нему доступ из любого места в QML - если вы не скрываете имя.В качестве альтернативы вы также можете зарегистрировать Singleton в QML.
Для обоих вам сначала необходимо создать QObject

public class MyContextObject: public QObject {
    Q_OBJECT

    Q_PROPERTY(QVariant myVar READ myVar NOTIFY myVarChanged)

    QVariant m_myVar;
public:
    MyContextObject(QObject* parent = nullptr) : QObject(parent) {}

    QVariant myVar() { return m_myVar; }

    void setMyVar(QVariant var) { 
        if (var == m_myVar) return;
        m_myVar = var;
        emit myVarChanged();
    }

signals:
    void myVarChanged();
}

Этот объект, который вы создаете в своем main , и установить его какcontextProperty

MyContextObject* mctx = new MyContextObject();
view.rootContext()->setContextProperty("myCtx", mctx);

Чтобы установить его из C ++, используйте установщик.Со стороны QML просто привязайте к myCtx.myVar
Также предоставьте доступ к сеттеру, если вы хотите изменить его и из QML


Это не проверено, у меня нетсреда разработки Qt доступна прямо сейчас.Чтобы выставить его как синглтон, вы можете использовать эту функцию: https://doc.qt.io/qt-5/qqmlengine.html#qmlRegisterSingletonType-1

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...