Perché QGraphicsItem :: scenePos () continuano a tornare (0,0)
-
18-09-2019 - |
Domanda
Ho accarezzato questo pezzo di codice:
QGraphicsLineItem * anotherLine = this->addLine(50,50, 100, 100);
qDebug() << anotherLine->scenePos();
QGraphicsLineItem * anotherLine2 = this->addLine(80,10, 300, 300);
qDebug() << anotherLine2->scenePos();
Se il puntatore this
riferisce ad un QGraphicsScene
. In entrambi i casi, ottengo QPointF(0,0)
per entrambe le uscite.
Dalla lettura del documento, ho pensato scenePos()
deve restituire la posizione della linea all'interno della scena, non dove è all'interno del suo sistema di coordinate locale. Che cosa sto facendo di sbagliato?
Soluzione
Dopo aver letto la documentazione QT 4.5 con attenzione su AddLine , mi rendo conto di quello che ho sono state facendo male. Secondo il documento:
Si noti che la geometria dell'elemento è disponibile in coordinate voce, e la sua posizione viene inizializzato a (0, 0)
Quindi, se mi specificare AddLine (50,50, 100, 100), sono in realtà modificherò le relative coordinate elemento locale. L'assunzione feci che sarà trattata come una coordinata scena è errata o infondata. Cosa dovrei fare è questo
// 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);
Quindi, se io sono l'aggiunta di una linea disegnando all'interno della scena, ho bisogno di ripristinare il suo centro a (0,0), quindi utilizzare SETPOS () per spostarlo dove voglio che sia nella scena.
Spero che questo aiuti chiunque inciampare sullo stesso problema.