QML - отслеживание глобальной позиции компонента

Я хотел бы отследить глобальное положение объекта (или относительно одного из его предков) и связать его с позицией какого-либо другого элемента.

Я думал об использовании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). Для этого мне нужна разница между координатами. Если я не ошибаюсь, якоря не позволяют рассчитать расстояние между ними.

Ответы на вопрос(4)

Ваш ответ на вопрос