2009-07-20 17 views
7

I zostały toying z tego kawałka kodu:Dlaczego QGraphicsItem :: scenePos() powracają (0,0)

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

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

Jeżeli wskaźnik this odnosi się do QGraphicsScene. W obu przypadkach otrzymuję QPointF(0,0) dla obu wyjść.
Po przeczytaniu dokumentu, myślałem, że scenePos() ma zwrócić pozycję linii w scenie, a nie w jej lokalnym układzie współrzędnych. Co ja robię źle?

Odpowiedz

17

Po uważnym przeczytaniu dokumentacji QT 4.5 na addLine, zdaję sobie sprawę z tego, co robiłem źle. Według Doc:

Należy zauważyć, że geometria elementu jest przewidzianego w współrzędne pozycji, a jego pozycja jest inicjowany do (0, 0)

Więc jeśli mogę określić addLine (50,50 100, 100), aktualnie modyfikuję lokalną koordynację elementu. Założenie, że zrobiłem, że będzie traktowane jako współrzędna sceny, jest błędne lub bezpodstawne. Co powinienem robić to za

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

Więc jeśli dodaję linię rysując na scenie, muszę zresetować swoje centrum na (0,0), a następnie użyć setpos(), aby przenieść go do miejsca, gdzie ja chcesz, żeby był na miejscu.

Mam nadzieję, że pomoże to każdemu, kto natknie się na ten sam problem.

+0

Spędziłem jedno popołudnie polując na to! Dziękuję bardzo! (nawet jeśli ten wątek ma 3 lata) – HWende

Powiązane problemy