qt — выставить объект C ++ в QML и прослушать события изменения

У меня есть объект, который я определяю в C ++, и пытаюсь представить строку члена в QML. Класс определяется как:

#ifndef MYTYPE_H
#define MYTYPE_H
#include <QString>
#include <QObject>class MyType : public QObject
{
Q_OBJECT
Q_PROPERTY(QString foo READ foo WRITE setFoo NOTIFY fooChanged)

public:
MyType(QObject *parent = nullptr) :
QObject(parent),
mFoo("0")
{
}

QString foo() const
{
return mFoo;
}

void setFoo(QString foo)
{
if (foo == mFoo)
return;

mFoo = foo;
emit fooChanged(mFoo);
}

signals:
void fooChanged(QString foo);

private:
QString mFoo;
};

#endif // MYTYPE_H

Поэтому я пытаюсь разоблачить mFoo объект к QML. Теперь я устанавливаю это с контекстом приложения как:

QtQuickControlsApplication app(argc, argv);
QQmlApplicationEngine engine(QUrl("qrc:/main.qml"));

qmlRegisterType<MyType>("MyType", 1, 0, "MyType");
MyType myType;
QObject *topLevel = engine.rootObjects().value(0);

engine.rootContext()->setContextProperty("foo", &myType);

Теперь в моем qml, как я могу прослушать изменение строки, которую я выставляю. Поэтому я хотел бы, чтобы метод слушателя вызывался каждый раз, когда mFoo член меняется.

1

Решение

Вы можете использовать Connections-объект для этого.

Connections {
target: yourContextProperty
onFooChanged: console.log('I do something cool when foo changes!')
}

Смотрите также Вот Еще несколько примеров, как использовать свойства контекста. (Это также имеет пример для Connections)

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]