Qt 为什么QML中的属性绑定更改不会立即传播
在QML中应用属性绑定时,我遇到了一个问题。当我们有一个父组件(窗口)和一个子组件(矩形),它有一些属性绑定到父组件(宽度、高度或锚点。填充:父),当我在JS代码中更改父属性时,如果我想在同一JS代码中读取子属性(绑定到父属性)的值,它会显示旧值(未更新)。看起来父母财产的变化还没有传播到孩子的。以下是此问题的示例:Qt 为什么QML中的属性绑定更改不会立即传播,qt,qml,qt-quick,Qt,Qml,Qt Quick,在QML中应用属性绑定时,我遇到了一个问题。当我们有一个父组件(窗口)和一个子组件(矩形),它有一些属性绑定到父组件(宽度、高度或锚点。填充:父),当我在JS代码中更改父属性时,如果我想在同一JS代码中读取子属性(绑定到父属性)的值,它会显示旧值(未更新)。看起来父母财产的变化还没有传播到孩子的。以下是此问题的示例: Window { id:myWindow visible: true width: 640 height: 480 title: qsTr("Hello World") Recta
Window {
id:myWindow
visible: true
width: 640
height: 480
title: qsTr("Hello World")
Rectangle{
id:customRec
width:parent.width
height: parent.height
color: "blue"
}
Button{
id:myBtn
onClicked: {
myWindow.width = 800
myWindow.height = 600
console.log(customRec.width)
console.log(customRec.height)
}
}}
单击按钮后,显示:
qml:640
qml:480
新值取代了800和600。尽管矩形的缩放效果很好。再次单击后,它将显示更新的值(800和600)。有人能解释一下这里发生了什么,以及绑定属性更改如何立即传播到绑定属性吗。我将Qt 5.12.2与msvc2017_64编译器一起使用。您正在打印更新前的属性。使用下面的代码,您可以发现
onWidthChanged
信号出现在控制台日志之后onWidthChanged
信号在更新宽度后出现
import QtQuick 2.10
import QtQuick.Window 2.10
import QtQuick.Controls 2.2
Window {
id:myWindow
visible: true
width: 640
height: 480
title: qsTr("Hello World")
Rectangle{
id:customRec
width: parent.width
height: parent.height
color: "blue"
onWidthChanged: console.log("***********")
}
Button{
id:myBtn
width: 100
height: 100
onClicked: {
myWindow.width = myWindow.width +50
myWindow.height = myWindow.height +50
console.log("--------------------------")
console.log("window width" + myWindow.width)
console.log("window height" + myWindow.height)
console.log("customrect width" + customRec.width)
console.log("customrect height" + customRec.height)
}
}
}