ado*_*ntz 0 binding qt qml qt5 qt5.4
我有 QVariantMap (不是 QObject,因为属性名称没有预定义)。我将 QVariantMap 注入到 QML 根上下文中以使用属性值进行绑定。
问题是,当我更改 QVariantMap 或什至当我更改 QVariantMap 并为更新的对象调用 setContextProperty 时,或者当我更新(使用 fromValue) contextProperty 返回的对象时,什么也没有发生。所以这看起来像是一次性绑定。
那么,以可观察的方式将 Map 或 Map 注入 QML 上下文中的正确方法是什么,以便映射中的更改项目将反映在 QML 中?
要将 C++ 映射公开到 QML,而不创建 QObject 派生类,您可以使用QQmlPropertyMap。
主程序
// create our data
QQmlPropertyMap ownerData;
ownerData.insert("name", QVariant(QString("John Smith")));
ownerData.insert("phone", QVariant(QString("555-5555")));
// expose it to the UI layer
QQmlApplicationEngine engine;
engine.rootContext()->setContextProperty("owner", &ownerData);
engine.load(QUrl(QStringLiteral("qrc:/main.qml")));
Run Code Online (Sandbox Code Playgroud)
主.qml
Window {
Text { text: owner.name + " " + owner.phone }
}
Run Code Online (Sandbox Code Playgroud)
绑定是动态的 - 每当更新键的值时,绑定到该键的任何内容也会更新。不需要setContextProperty每次换的时候都打电话QQmlPropertyMap。
| 归档时间: |
|
| 查看次数: |
3900 次 |
| 最近记录: |