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