Я хотел бы отслеживать глобальную позицию объекта (или относительно одного из его предков) и привязывать его к некоторой позиции позиции.
Я думал об использовании 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
}
Но хорошо... да... этот не совсем масштабируется и так же уродлив, как и он.
Кто-нибудь знает, как эта проблема может быть решена более чистым способом?
Edit:
Что касается меня, я не могу использовать якоря в этом случае. Компонент SomeObject
представляет собой настраиваемый компонент, который рисует кривую Безье из одной точки в другую (она соединяет два TrackedObjects
). Для этого мне нужна разница между координатами. Если я верный якорь не предоставляет никакого способа расчета расстояния между ними.