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