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

时间:2016-07-27 21:38:16

标签: 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;
    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';
        }
    }
}

代码最初显示预期内容:

enter image description here

当我点击窗口时,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,我看到了:

enter image description here

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

0 个答案:

没有答案