如何在更改之前获取以前的属性值? (在QML中)

时间:2018-01-25 12:12:40

标签: properties qml

我想了解以下问题:

  

如何在声明中存储属性的先前值   QML语言?

任务是在更改之前将属性值记忆到另一个属性。问题是现有的信号机制 onPropertyNameChanged()。该机制在修改后发出有关属性更改的信号。在这个处理程序中,不可能获取属性的先前值来记忆它。

希望看到代码示例。

3 个答案:

答案 0 :(得分:1)

有趣的问题。我看到的唯一方法是有点愚蠢:

Item {
    id: item
    property int prev: 0
    property int temp: value
    property int value: 0
    onValueChanged: {
        prev = temp;
        temp = value;
        console.log("prev=" + prev);
        console.log("value=" + value)
        console.log("---------------");
    }

    Timer {
        interval: 1000
        repeat: true
        running: true
        onTriggered: {
            item.value = Math.round(Math.random() * 1000);
        }
    }
}

答案 1 :(得分:0)

为什么不创建您的自定义信号?

signal myValueChanged(int oldValue, int newValue)

每次更改值时,发出此信号:

function setValue(value) {
    var previous = this.value
    this.value = value
    myValueChanged(previous, value)
}

onMyValueChanged: console.log(oldValue, newValue)
Component.onCompleted: setValue(10)

答案 2 :(得分:0)

为什么不自己创建buffer属性? 例如)

property int value: 0
property int prevValue: 

onValueChanged: {
    ... logic to deal with value change
    ... if you are trying to diff with prevValue, make sure check if prevValue is not undefined (first time Value changes)
    prevValue = value;
}

如果要处理自定义类型“ var”,则可以尝试:

onValueChanged: {
    prevValue = JSON.parse(JSON.stringify(value));
}
prevValue = JSON.parse(JSON.stringify(value));