Question

J'ai du mal à faire fonctionner la cartographie des coordonnées comme prévu.Pour une raison quelconque, le résultat est généralement erroné, à moins qu'une condition très spécifique ne soit remplie.

Voici un exemple de scénario :

enter image description here

Les objets sont classés dans une arborescence, chaque nœud mesurant 100 pixels carrés.Le mappage est effectué de chaque nœud vers le parent du premier nœud.Les articles sont présentés au fur et à mesure qu'ils sont commandés, par ex.1 est parent de 2 et 4 enfants, 2 est parent de 3 et ainsi de suite...

  • Node0 est aux coordonnées locales 0,0 dans son parent, donc logiquement, mapper la position du nœud 0 renvoie 0,0
  • Cependant, Node1 ne renvoie pas 100, 100, mais 200, 200.
  • Les nœuds 2 et 3 se comportent différemment, cette fois les valeurs sont correctement incrémentées de la valeur de nœud précédente (incorrecte) à 300, 300 et 400, 400 respectivement.
  • Node4 renvoie 300, 700 même s'il n'est qu'à 100 pixels en dessous du nœud 2
  • Nœud5 - 200, 1 000
  • Node6 - 300, 700 - il est inférieur au nœud 5 mais affiche une valeur y inférieure
  • Node7 - 200, 1400 - 100 pixels inférieurs au nœud 6 renvoie une valeur y de 700 pixels supplémentaires

Il semble que ce mappage ne fasse pas ce que je suppose, c'est-à-dire produire une coordonnée absolue par rapport à l'objet mappé, par ex.le coin supérieur gauche du nœud 0.Ce qui devrait produire les valeurs attendues :

  • Nœud0 0, 0
  • Nœud1 100, 100
  • Nœud2 200, 200
  • Nœud3 300, 300
  • Nœud4 200, 400
  • Nœud5 100, 500
  • Nœud6 200, 600
  • Nœud7 100, 700

Il semble que chaque nouvel enfant à un niveau donné fausse le résultat.Une idée de ce qui se passe ici ?

Était-ce utile?

La solution

Après avoir enquêté sur mapToItem méthode J'ai conclu que ce n'était pas le bon outil pour le travail, alors j'ai écrit le mien.

QPointF absolutePosition() {
        QPointF p(0, 0);
        QQuickItem * item = this;
        while (item != Object::_rootUI) { // absolute position relative to _rootUI
            p += item->position();
            item = item->parentItem();
        }
        return p;
    }
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top