1
我有一个我用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
成员改变时都会被调用。
尝试使用'target'创建['Connections'](http://doc.qt.io/qt-5/qml-qtqml-connections.html) - 对象成为你的上下文属性并处理'onFooChanged'。我还没有完成上下文属性,现在我无法测试它。 – derM
@derM谢谢!不知道这个'Connections'对象。有用!如果你想写它作为答案,请继续。 – Luca
@Luca没有答案,但相关。当您仅将类用作上下文属性时,不必调用“qmlRegisterType”。 – Macias