如果我有QML对象,其中包含对象,其中包含对象,我如何绑定到内部对象的字段,以便在QML的一部分中设置该字段将新值传播到QML的其他部分正在听吗?
鉴于这个玩具示例:
import QtQuick 2.7
import QtQuick.Controls 1.4
import QtQuick.Layouts 1.2
import QtQuick.Window 2.2
Window {
visible: true
width:150;
property var p;
Component.onCompleted: {
p = {'c':{'gc':{'ggc':'field_val'}}};
}
Label { text : "p.c.gc.ggc="+p.c.gc.ggc; }
MouseArea {
anchors.fill: parent;
onClicked: {
console.log("setting p.c.gc.ggc = 'new_val';")
p.c.gc.ggc = 'new_val';
}
}
}
代码最初显示预期内容:
当我点击窗口时,QML按照console.log
打印出来:
qml: setting p.c.gc.ggc = 'new_val';
但是,Label
文字未更新为p.c.gc.ggc=new_val
接下来,如果我在p.c.gc.ggc = 'new_val';
之后添加以下行:
p = p;
编辑会传播到Label
,我看到了:
然而,这似乎是一个黑客。我错过了一些机制吗?不应该对嵌套对象结构的更新自动复制到QML代码的其他部分吗?