2009-07-20 6 views
7

Я играл с этим фрагментом кода:Почему QGraphicsItem :: scenePos() снова возвращаются (0,0)

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

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

Где this указатель относится к QGraphicsScene. В обоих случаях я получаю QPointF(0,0) для обоих выходных данных.
Из чтения документа я думал, что scenePos() должен возвращать позицию линии внутри сцены, а не там, где она находится в локальной системе координат. Что я делаю не так?

ответ

17

После тщательного прочтения документации QT 4.5 по адресу addLine, я понимаю, что я делал неправильно. Согласно документу:

Заметим, что геометрия элемента является предоставляется в координатах элемента, а его положение инициализируется (0, 0)

Так что, если я указываю AddLine (50,50 , 100, 100), я фактически изменяю его локальную координату элемента. Предположение, которое я сделал, что оно будет рассматриваться как координата сцены, является неправильным или необоснованным. То, что я должен делать это

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

Так что, если я добавляю линию, рисуя в пределах сцены, мне нужно сбросить его центр (0,0), а затем использовать setPos(), чтобы переместить его туда, где я хотите, чтобы он был в сцене.

Надеюсь, это поможет любому, кто споткнется на ту же проблему.

+0

Я провел один день, охотясь за этим! Спасибо огромное! (даже если эта нить составляет 3 года) – HWende