Почему QGraphicsItem :: scenePos () продолжает возвращать (0,0) - PullRequest
7 голосов
/ 20 июля 2009

Я играл с этим фрагментом кода:

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() должен вернуть положение линии в пределах сцены, а не там, где она находится в своей локальной системе координат. Что я делаю не так?

1 Ответ

18 голосов
/ 20 июля 2009

Внимательно прочитав документацию по 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 (), чтобы переместить ее туда, где я хочу, чтобы она была на сцене.

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

...