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?

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top