Por que QGraphicsItem :: scenePos () voltem sempre (0,0)
-
18-09-2019 - |
Pergunta
Eu tenho sido brincando com este pedaço de código:
QGraphicsLineItem * anotherLine = this->addLine(50,50, 100, 100);
qDebug() << anotherLine->scenePos();
QGraphicsLineItem * anotherLine2 = this->addLine(80,10, 300, 300);
qDebug() << anotherLine2->scenePos();
Quando o ponteiro this
refere-se a um QGraphicsScene
. Em ambos os casos, eu recebo QPointF(0,0)
tanto para saída.
Da leitura do documento, pensei scenePos()
deve retornar a posição da linha dentro da cena, não onde ele está dentro de seu sistema de coordenadas local. O que estou fazendo de errado?
Solução
Depois de ler a documentação QT 4,5 cuidadosamente sobre AddLine , eu percebo que eu foram fazendo de errado. De acordo com o doc:
Note que a geometria do item é fornecidas em coordenadas de item, e sua posição é inicializado para (0, 0)
Então, se eu especificar AddLine (50,50, 100, 100), estou realmente modificar seu ponto de coordenadas local. A suposição de que eu fiz que ele será tratado como uma cena de coordenadas está errado ou infundadas. O que eu deveria estar fazendo é 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);
Então, se eu estou adicionando uma linha de desenho dentro da cena, eu preciso redefinir seu centro para (0,0), em seguida, usar setpos () para movê-lo para onde eu quero que seja na cena.
Espero que isso ajude quem topar com o mesmo problema.