将C 对象暴露于QML并收听更改事件
expose a C++ object to QML and listen to change events
我有一个我在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
成员都在更改时都会被调用。
您可以使用Connections
-Object为此。
Connections {
target: yourContextProperty
onFooChanged: console.log('I do something cool when foo changes!')
}
另请参见家事更多示例,如何使用上下文属性。(它也有Connections
的示例)
相关文章:
- 从C++实例化QML
- 使用CMake创建QML插件
- Android NDK传感器向事件队列报告奇怪的间隔
- QT通过C++添加映射QML项目
- 如何从C++端挂接到 QML 项的 onClick 事件
- 如何在 Qml 中模拟按键事件?
- 如何从qml Keys.oPressed调用qt keyPressEvent(QKeyEvent*事件)
- 如何拦截Qt Quick qml事件
- 将关键事件发送到 Qt QML WebEngineView
- Qt/Qml - 触发 QApplication/QQmlApplicationEngine 事件(键和鼠标事件)
- QML 列表视图和密钥导航 - 处理单个密钥事件
- 在QML上下文中处理QT C 事件
- 将C 对象暴露于QML并收听更改事件
- QML:C 中的Mousearea的事件
- 如何使用从C++生成的关键事件更改 QML 文本字段文本属性
- 大理石鼠标事件在地图qml上不起作用
- 如何从 C++ 访问特定 QML 控件的事件
- 处理和触发从 QML 到 C++ 的事件,反之亦然
- QML:文档完全加载时触发的事件
- QML 中的事件过滤器