Qt 属性更改前后的QML事件

Qt 属性更改前后的QML事件,qt,qml,qtquick2,Qt,Qml,Qtquick2,是否有任何可以绑定的信号允许我在属性更改之前和之后直接执行函数 例如,类似这样的事情: Canvas { id: canvas anchors.fill: parent property real lastX property real lastY property var lastContext function cacheImage(){ lastContext = canvas.context } fu

是否有任何可以绑定的信号允许我在属性更改之前和之后直接执行函数

例如,类似这样的事情:

Canvas {
    id: canvas
    anchors.fill: parent

    property real lastX
    property real lastY

    property var lastContext

    function cacheImage(){
        lastContext = canvas.context
    }

    function loadImageFromCache(){
        canvas.context = lastContext
        canvas.requestPaint()
    }
}
我想在画布大小更改之前调用
cacheImage()
函数,在调整大小完成之后调用
loadImageFromCache()


如果我正确理解了
onWidthChanged
onHeightChanged
,请执行后者,但我需要先保存图像,然后再执行该操作。有一种简单的方法可以做到这一点吗?

这种功能不是QML的“核心设计意图”的一部分,因此您无法直接使用它

<> P>当您实现自己的SETER函数时,C++对象非常容易。 但即使在QML中,您也可以简单地使用辅助setter函数,而不是直接使用属性:

function setSomeProp(newValue) {
  if (newValue === oldValue) return
  stuffBeforeChange()
  oldValue = newValue
  stuffAfterChange() // optional, you can use the default provided signal too
}
如果坚持使用基于属性的语法,可以使用其他辅助属性:

property type auxProp
onAuxPropChanged: setSomeProp(auxProp)

这将允许您使用
=
操作符以及进行绑定。

但是在大小更改之前不必调用
cacheImage()
!在最近的画布内容更改之后,以及在新画布大小生效之前,需要随时调用它。缓存画布的窗口非常长,并且在更改之间扩展。“第n次财产变更前”事件简单地说是“第(n-1)次财产变更后”:)

请参阅我对问题的评论,也许这会对您有所帮助。我甚至没有这样想,它工作得很好。非常感谢你。