Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何检测JSON对象内的更改?_Json_Qt_Qml_Signals - Fatal编程技术网

如何检测JSON对象内的更改?

如何检测JSON对象内的更改?,json,qt,qml,signals,Json,Qt,Qml,Signals,但我预期的结果是: qml: Changed to : old QML识别onJsonChanged:信号没有问题,但该信号实际上似乎没有激活。我知道json.name正在成功更改,因为我在运行时进行了调试,发现它有了新的值。那么为什么信号没有激活,和/或如何检测json对象中的更改呢?当对象更改时,会发出与X属性相关的信号,在您的情况下,更改某些内部属性不会更改对象(内存空间),只会修改内部属性。要验证这一点,您可以将示例修改为: qml: Changed to : old qml: Cha

但我预期的结果是:

qml: Changed to : old

QML识别
onJsonChanged:
信号没有问题,但该信号实际上似乎没有激活。我知道
json.name
正在成功更改,因为我在运行时进行了调试,发现它有了新的值。那么为什么信号没有激活,和/或如何检测json对象中的更改呢?

当对象更改时,会发出与X属性相关的信号,在您的情况下,更改某些内部属性不会更改对象(内存空间),只会修改内部属性。要验证这一点,您可以将示例修改为:

qml: Changed to : old
qml: Changed to : new
获得以下信息:

import QtQuick 2.12
import QtQuick.Window 2.12
import QtQuick.Controls 2.0

Window {
    visible: true
    width: 640
    height: 480

    property var json: {
        "name": "bar"
    }

    Component.onCompleted: json = {"name3": "foo"}

    onJsonChanged: console.log("Changed to : " + json)

    Button {
        onClicked: console.log("Button clicked: " + json)
    }
}

onJsonChanged信号在分配的对象更改时激活,而不是在对象相同(指向相同的内存位置)的内部元素更改时激活,例如,如果更改为以下内容,则应检测到更改:
Component.onCompleted:json={“name3”:“foo”}onJsonChanged:console.log(“更改为:”+json)按钮{onClicked:console.log(“按钮点击:+json)}
非常有意义。如果你把它作为回答,我很乐意接受
import QtQuick 2.12
import QtQuick.Window 2.12
import QtQuick.Controls 2.0

Window {
    visible: true
    width: 640
    height: 480

    property var json: {
        "name": "bar"
    }

    Component.onCompleted: json = {"name3": "foo"}

    onJsonChanged: console.log("Changed to : " + json)

    Button {
        onClicked: console.log("Button clicked: " + json)
    }
}
qml: Changed to : [object Object]
qml: Changed to : [object Object]