QML - seguimiento de la posición global de un componente

Me gustaría rastrear una posición global de un objeto (o en relación con uno de sus antepasados) y vincularlo a la posición de algún otro elemento.

Estaba pensando en usarmapFromItem como sigue:

SomeObject {
  x: ancestor.mapFromItem(trackedObject, trackedObject.x, 0).x
  y: ancestor.mapFromItem(trackedObject, 0, trackedObject.y).y
}

El problema con este enfoque es que lamapFromItem se evalúa una vez y no se actualiza a medida que uno de sus argumentos se actualiza. Además, la asignación a veces devuelve la nueva posición alterada por un desplazamiento que no puedo rastrear en el código (pero eso no es lo que importa).

Mi segunda idea fue calcular la posición global implementando una función que sumaría recursivamente las compensaciones, deteniéndose en el antepasado proporcionado (algo así comocalculateOffsetFrom(ancestor)). Aún así, esto es solo una función y, en lo que a mí respecta, no se volverá a evaluar a medida que uno de los ancestros cambie de posición (a menos que, en esa función, me uniré llamándolo alonXChanged señal para cada uno de los antepasados ​​en el camino, lo que parece una solución sucia).

Así que al final he agregado propiedades al objeto que pretendo rastrear y luego las vinculo:

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
}

Pero bueno ... sí ... este no se escala en absoluto y es tan feo como se pone.

¿Alguien tiene alguna idea de cómo este problema podría resolverse de una manera más limpia?

Editar: En lo que a mí respecta, no puedo usar anclas en este caso. losSomeObject componente es un componente personalizado que dibuja una curva de Bézier de un punto a otro (conectará dosTrackedObjects). Para eso necesito la diferencia entre las coordenadas. Si estoy bien, los anclajes no proporcionan ninguna forma de calcular la distancia entre ellos.

Respuestas a la pregunta(4)

Su respuesta a la pregunta