如何跟踪项目的绝对位置
How to track item's absolute position
任务是跟踪项目的绝对位置。
由于项目的坐标是相对于其直接父级指定的,因此无法知道项目的绝对位置何时发生变化以防其父级移动。
考虑下面的示例,我想知道 rect2
何时会由于其父级(即 rect1
)而在视觉上移动,由空格键触发的运动:
import QtQuick 2.2
Item {
id: root
width: 600
height: 200
focus: true
Rectangle {
id: rect1
x: 200
width: 400
height: 200
color: "salmon"
Rectangle {
id: rect2
x: 200
width: 200
height: 200
color: "seagreen"
onXChanged: console.log("rect2 x changed:", x)
}
}
Keys.onSpacePressed: rect1.x = 0
}
如 this page 所述,您可以在不同元素之间添加信号。对于您的情况,您可以将 rect1
的信号 xChanged
添加到 rect2
.
的信号中
Component.onCompleted: {
rect1.xChanged.connect(rect2.xChanged);
}
另外,请注意它仍会打印 200,因为它的位置相对于它的父级没有改变。
为此你可以做类似的事情:
onXChanged: console.log("rect2 x changed:", rect1.x + rect2.x)
任务是跟踪项目的绝对位置。
由于项目的坐标是相对于其直接父级指定的,因此无法知道项目的绝对位置何时发生变化以防其父级移动。
考虑下面的示例,我想知道 rect2
何时会由于其父级(即 rect1
)而在视觉上移动,由空格键触发的运动:
import QtQuick 2.2
Item {
id: root
width: 600
height: 200
focus: true
Rectangle {
id: rect1
x: 200
width: 400
height: 200
color: "salmon"
Rectangle {
id: rect2
x: 200
width: 200
height: 200
color: "seagreen"
onXChanged: console.log("rect2 x changed:", x)
}
}
Keys.onSpacePressed: rect1.x = 0
}
如 this page 所述,您可以在不同元素之间添加信号。对于您的情况,您可以将 rect1
的信号 xChanged
添加到 rect2
.
Component.onCompleted: {
rect1.xChanged.connect(rect2.xChanged);
}
另外,请注意它仍会打印 200,因为它的位置相对于它的父级没有改变。
为此你可以做类似的事情:
onXChanged: console.log("rect2 x changed:", rect1.x + rect2.x)