Вопрос

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

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

Это было полезно?

Решение

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top