【发布时间】:2013-07-29 11:02:29
【问题描述】:
我想跟踪一个对象的全局位置(或相对于它的一个祖先)并将它绑定到其他项目的位置。
我正在考虑使用mapFromItem如下:
SomeObject {
x: ancestor.mapFromItem(trackedObject, trackedObject.x, 0).x
y: ancestor.mapFromItem(trackedObject, 0, trackedObject.y).y
}
这种方法的问题是 mapFromItem 被评估一次,并且不会随着其中一个参数的更新而更新。此外,映射有时会返回由我无法在代码中跟踪的偏移量更改的新位置(但这不是手头的问题)。
我的第二个想法是通过实现一个函数来计算全局位置,该函数将递归地求和偏移量,在提供的祖先处停止(类似于calculateOffsetFrom(ancestor))。仍然这只是一个函数,就我而言,它不会随着祖先位置的变化而重新评估(除非在该函数中,我会将每个函数绑定到 onXChanged 信号一路上的祖先之一,这似乎是一个肮脏的解决方案。
所以最后我为要跟踪的对象添加了属性,然后绑定到它们:
TrackedObject {
property real offsetX: x + parent.x + parent.parent.x + parent.parent.parent.x ...
property real offsetY: y + parent.y + parent.parent.y + parent.parent.parent.y ...
}
SomeObject {
x: trackedObject.globalX
y: trackedObject.globalY
}
但是好吧...是的...这个根本无法缩放,而且很丑。
有谁知道如何以更简洁的方式解决这个问题?
编辑:
就我而言,在这种情况下我不能使用锚点。 SomeObject 组件是一个自定义组件,它从一个点到另一个点绘制一条贝塞尔曲线(它将连接两个TrackedObjects)。为此,我需要坐标之间的差异。如果我是正确的,锚点不会提供任何计算它们之间距离的方法。
【问题讨论】: