Найдите центральную позицию QGraphicsScene?

Я попытался использовать следующий код, чтобы добавить строку в свою сцену:

    line = new QGraphicsLineItem(200,55,200,55);
    mscene.addItem(ruler);

Но кажется, что координата QGraphicsLineItem начинается с левого угла. Я ни в коем случае не хочу менять происхождение. Я хотел бы просто получить координату центральной позиции qgraphicsscene / qgraphicsview. Какую функцию мне следует использовать?


person Nyaruko    schedule 28.10.2014    source источник


Ответы (2)


line = new QGraphicsLineItem(200,55,200,55);
mscene.addItem(ruler);

Как указано в документации для этого конструктора QGraphicsLineItem: -

Создает QGraphicsLineItem, используя линию между (x1, y1) и (x2, y2) в качестве линии по умолчанию.

Это создает QGraphicsLineItem с локальными координатами (200, 55, 200, 55), поэтому линия, которую вы создаете, имеет координаты начала и конца в одной и той же точке (200, 55).

После создания линейного объекта и добавления его в сцену вы можете установить его положение с помощью вызова setPos. Чтобы получить центральное положение сцены, вы можете использовать QGraphicsScene :: width () и QGraphicsScene :: height (): -

// Assuming pScene is a pointer to the QGraphicsScene
line->setPos(pScene->width()/2, pScene->height()/2);

QGraphicsView - это просто окно, смотрящее в сцену, поэтому оно может быть меньше, чем сцена. В этом случае элемент может находиться в центре сцены, но не отображаться в центре представления.

Вы можете центрировать представление на элементе с помощью вызова QGraphicsView :: centerOn (const QGraphicsItem * item)

person TheDarkKnight    schedule 28.10.2014

Вы можете сопоставить систему coodrinate. Чтобы получить центр экрана в координатах сцены, вычислите центр области просмотра, а затем выполните mapToScene:

myView.mapToScene(myView.viewport()->rect().center()) 

Дополнительную информацию о сопоставлении координат можно найти по адресу: [https://doc.qt.io/archives/4.6/graphicsview.html#item-coordinateshibited[1]

person mots_g    schedule 28.10.2014