QML - tracking Globale position einer Komponente

Ich würde wie zu verfolgen eine Globale position eines Objektes (oder relativ zu einer seiner Vorfahren) und binden Sie es an ein anderes Element, position.

Ich dachte über die Verwendung von mapFromItem wie folgt:

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

Das problem bei diesem Ansatz ist, dass die mapFromItem einmal ausgewertet und aktualisiert nicht als eine von Argumente wird aktualisiert. Darüber hinaus ist die Zuordnung manchmal gibt die neue position verändert werden, indem ein offset ich bin nicht in der Lage zu verfolgen, in den code (das ist aber nicht die Sache bei der hand).

Meine zweite Idee war die Berechnung der globalen position durch die Implementierung einer Funktion, die würde, die rekursiv die Summe der offsets, halt an den bereitgestellten Vorfahren (so etwas wie calculateOffsetFrom(ancestor)). Noch ist dies nur eine Funktion, und soweit ich bin besorgt, es wird nicht neu bewertet zu bekommen, als einer der Vorfahren position ändert (es sei denn, in dieser Funktion, ich werde binden, nannte es der onXChanged signal für jeden der Vorfahren auf dem Weg, das scheint wie eine dirty Lösung).

Also am Ende habe ich Hinzugefügt, die Eigenschaften zu dem Objekt, ich habe die Absicht zu verfolgen, und dann habe ich an Sie:

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
}

Aber gut... ja... das man nicht skalieren und ist so hässlich wie es nur geht.

Hat jemand eine Idee, wie dieses problem gelöst werden könnte sauberer?

Edit:
Soweit ich bin besorgt, ich kann nicht mit Anker in diesem Fall. Die SomeObject Komponente ist eine benutzerdefinierte Komponente zeichnen einer Bézier-Kurve von einem Punkt zum anderen (es verbindet zwei TrackedObjects). Dafür muss ich die Differenz zwischen den Koordinaten. Wenn ich richtig bin Anker bieten keine Möglichkeit, die Berechnung der Entfernung zwischen Ihnen.

InformationsquelleAutor Konrad Madej | 2013-07-29
Schreibe einen Kommentar