我有QVariantMap(不是QObject,因为属性名称没有预定义) . 我将QVariantMap注入QML根上下文,以使用属性值进行绑定 .
问题是,当我更改QVariantMap或甚至当我更改QVariantMap并为更新的对象调用setContextProperty时,或者当我更新(使用fromValue)对象返回contextProperty时,没有任何反应 . 所以这看起来像一次约束 .
那么,以可观察的方式将Map或Map注入QML上下文的正确方法是什么,以便更改 Map 中的项目将反映在QML中?
2 回答
要将C map公开给QML,而不创建QObject派生类,可以使用QQmlPropertyMap .
main.cpp中
main.qml
绑定是动态的 - 每当您更改
QQmlPropertyMap
时,每当一个键's value is updated, anything bound to that key will be updated as well. Don'需要调用setContextProperty
时 .您可以创建具有QVariantMap属性的QObject,并将该对象设置为contextObject(有关contextObject的文档,请参阅http://doc.qt.io/qt-5/qqmlcontext.html#details) . 在你的QML中,你可以全局使用"map"属性,它应该在你调用MyVariantMap :: setMap()时更新 .