Warum funktioniert QGraphicsItem :: scenePos () immer wieder (0,0)
-
18-09-2019 - |
Frage
Ich habe mit diesem Stück Code worden liebäugelt:
QGraphicsLineItem * anotherLine = this->addLine(50,50, 100, 100);
qDebug() << anotherLine->scenePos();
QGraphicsLineItem * anotherLine2 = this->addLine(80,10, 300, 300);
qDebug() << anotherLine2->scenePos();
Wenn der this
Zeiger auf eine QGraphicsScene
bezieht. In beiden Fällen ich QPointF(0,0)
für beide Ausganges.
Dokument Aus der Lektüre dachte ich scenePos()
soll die Position der Linie innerhalb der Szene zurückzukehren, nicht dort, wo es innerhalb seines lokalen Koordinatensystem. Was mache ich falsch?
Lösung
Nach der QT 4.5 Dokumentation sorgfältig zu lesen auf AddLine , wird mir klar, was ich Unrechttuns wurden. Gemäß dem Dokument:
Beachten Sie, dass die Sache des Geometrie in Punkt Koordinaten versehen, und ihre Position wird initialisiert (0, 0)
Wenn ich also angeben AddLine (50,50, 100, 100), ich bin zu modifizieren tatsächlich sein lokales Element koordinieren. Die Annahme, die ich gemacht, dass sie behandelt wird wie eine Szene koordinieren falsch oder unbegründet. Was soll ich tun, ist dies
// 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);
Also, wenn ich eine Linie bin Zugabe von in der Szene zeichnet, muß ich seine Mitte (0,0) dann zum Zurücksetzen verwenden setPos (), um es zu bewegen, wo ich es will in der Szene sein.
Hoffen, das jeden, der auf das gleiche Problem stolpern können.