Qt 如何绑定到QML中嵌套对象上的字段,以便在设置该字段时传播更新通知?

Qt 如何绑定到QML中嵌套对象上的字段,以便在设置该字段时传播更新通知?,qt,qml,Qt,Qml,如果我有一个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;

如果我有一个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将根据我的
控制台.log打印出来:

qml: setting p.c.gc.ggc = 'new_val';
但是,
标签
文本不会更新为
p.c.gc.ggc=new\u val

接下来,如果我在
p.c.gc.ggc='new_val'之后添加以下行

p = p;
编辑被传播到
标签
,我看到:


然而,这似乎是一个黑客。我是不是错过了一些机制?对嵌套对象结构的更新是否应该自动复制到QML代码的其他部分?

查看真正好奇的:为什么需要在QML中存储这种数据?我有一个数据树,我从SQLite获取,并在C++中使用HTTP请求。我不想创建一堆C++助手对象,因为连接C++ QML是费力的。因此,我来回传递顶部容器。数据看起来像
SampleSet{variety:foo,…,sub_samples:[SampleSet{property1:blah,property2:blah,…},SampleSet{…},…]}
。输入控件需要连接到顶级属性,然后,在 ListVIEW < /C>中,使用输入控件连接到每个子属性。看看真正好奇的:为什么需要在QML中存储这种数据?我有一个数据树,我从SQLite获取,并在C++中使用HTTP请求。我不想创建一堆C++助手对象,因为连接C++ QML是费力的。因此,我来回传递顶部容器。数据看起来像
SampleSet{variety:foo,…,sub_samples:[SampleSet{property1:blah,property2:blah,…},SampleSet{…},…]}
。输入控件需要连接到顶级属性,然后在
列表视图中使用输入控件连接到每个子属性。