将 C++ 对象暴露给 QML 并监听更改事件
expose a C++ object to QML and listen to change events
我有一个用 C++ 定义的对象,我正在尝试向 QML 公开一个成员字符串。 class 定义为:
#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
成员更改时都会调用的侦听器方法。
您可以为此使用 Connections
-对象。
Connections {
target: yourContextProperty
onFooChanged: console.log('I do something cool when foo changes!')
}
另请参阅 here 更多示例,了解如何使用上下文属性。 (它还有 Connections
的示例)
我有一个用 C++ 定义的对象,我正在尝试向 QML 公开一个成员字符串。 class 定义为:
#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
成员更改时都会调用的侦听器方法。
您可以为此使用 Connections
-对象。
Connections {
target: yourContextProperty
onFooChanged: console.log('I do something cool when foo changes!')
}
另请参阅 here 更多示例,了解如何使用上下文属性。 (它还有 Connections
的示例)