2009-07-20 9 views
7

He estado jugando con este pedazo de código:¿Por qué QGraphicsItem :: scenePos() en volver (0,0)

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

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

Cuando el puntero this se refiere a un QGraphicsScene. En ambos casos, obtengo QPointF(0,0) para ambas salidas.
Al leer el documento, pensé que scenePos() se supone que devuelve la posición de la línea dentro de la escena, no donde está dentro de su sistema de coordenadas local. ¿Qué estoy haciendo mal?

Respuesta

17

Después de leer detenidamente la documentación del QT 4.5 en addLine, me doy cuenta de lo que he estado haciendo mal. De acuerdo con el documento:

Tenga en cuenta que la geometría del elemento se proporciona en coordina elemento y su posición se inicializa a (0, 0)

Así que si puedo especificar AddLine (50,50 , 100, 100), en realidad estoy modificando su coordenada de elemento local. La suposición que hice de que se tratará como una coordenada de escena es incorrecta o infundada. Lo que debería hacer es este

// 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); 

Así que si estoy añadiendo una línea de dibujo dentro de la escena, lo que tenga que restablecer su centro a (0,0) y luego use setPos() para moverlo a donde quiero que esté en la escena

Espero que esto ayude a cualquiera que tropiece con el mismo problema.

+0

¡He pasado una tarde persiguiendo esto! Muchas gracias! (incluso si este hilo tiene 3 años) – HWende

Cuestiones relacionadas