如何检测 JSON 对象内的变化?
How to detect change within JSON object?
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": "old"
}
Component.onCompleted: json.name = "new"
onJsonChanged: console.log("Changed to : " + json.name)
Button {
onClicked: console.log("Button clicked: " + json.name)
}
}
qml: Changed to : old
但我希望输出为:
qml: Changed to : old
qml: Changed to : new
QML 识别 onJsonChanged:
信号没有问题,但信号实际上似乎没有激活。我知道 json.name
正在成功更改,因为我在运行时进行了调试并看到它具有新值。那么为什么信号没有激活,and/or我如何检测json对象的变化?
与 X 属性 关联的信号在对象更改时发出,在您的情况下,更改某些内部属性不会更改对象(内存 space)只会修改内部属性。要验证这一点,您可以将示例修改为:
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]
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": "old"
}
Component.onCompleted: json.name = "new"
onJsonChanged: console.log("Changed to : " + json.name)
Button {
onClicked: console.log("Button clicked: " + json.name)
}
}
qml: Changed to : old
但我希望输出为:
qml: Changed to : old
qml: Changed to : new
QML 识别 onJsonChanged:
信号没有问题,但信号实际上似乎没有激活。我知道 json.name
正在成功更改,因为我在运行时进行了调试并看到它具有新值。那么为什么信号没有激活,and/or我如何检测json对象的变化?
与 X 属性 关联的信号在对象更改时发出,在您的情况下,更改某些内部属性不会更改对象(内存 space)只会修改内部属性。要验证这一点,您可以将示例修改为:
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]