Qt 如何绑定到QML中嵌套对象上的字段,以便在设置该字段时传播更新通知?
如果我有一个QML对象,其中的对象也在其中,那么我如何绑定到一个内部对象的字段,以便在QML的一个部分中设置该字段,将新值传播到正在侦听它的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;
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{…},…]}
。输入控件需要连接到顶级属性,然后在列表视图中使用输入控件连接到每个子属性。