Question

Je suis en train de jouer avec ce morceau de code:

QGraphicsLineItem * anotherLine = this->addLine(50,50, 100, 100);
qDebug() << anotherLine->scenePos();

QGraphicsLineItem * anotherLine2 = this->addLine(80,10, 300, 300);
qDebug() << anotherLine2->scenePos();

Lorsque le pointeur this fait référence à un QGraphicsScene. Dans les deux cas, je reçois QPointF(0,0) pour les sorties.
À la lecture du document, je pensais que scenePos() est censé retourner la position de la ligne dans la scène, pas où il se trouve dans son système de coordonnées local. Qu'est-ce que je fais mal?

Était-ce utile?

La solution

Après avoir lu la documentation QT 4.5 soigneusement sur addline , je me rends compte que je ont fait mal. Selon le doc:

  

Notez que la géométrie de l'élément est   à condition que dans les coordonnées de l'objet, et son   la position est initialisé à (0, 0)

Donc, si je précise addline (50,50, 100, 100), je suis en train de modifier réellement coordonner son élément local. L'hypothèse que je fait qu'elle sera traitée comme une scène coordonnée est erronée ou sans fondement. Ce que je devrais faire est ce

// Create a line of length 100
QGraphicsItem * anotherLine = addLine(0,0, 100, 100); 

// move it to where I want it to be within the scene
anotherLine->setPos(50,50);

Donc, si je suis une ligne en ajoutant le dessin de la scène, je dois réinitialiser son centre (0,0) puis utilisez setPos () pour le déplacer à l'endroit où je veux que ce soit sur la scène.

Espérons que cela aide quelqu'un qui trébuche sur le même problème.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top