Нарисуйте сдвиг при рисовании в QGraphicsView
У меня проблема.
У меня есть класс, который наследует QGraphicsView, давайте предположим, что он называется "g". Я переопределил метод mousePressEvent, код этого метода:
void GraphWidget::mousePressEvent(QMouseEvent *event)
{
if(event->button() == Qt::MiddleButton)
createNode(event->pos().x(), event->pos().y());
update();
QGraphicsView::mousePressEvent(event);
}
Код метода createNode:
Node *GraphWidget::createNode(qreal x, qreal y, int id)
{
Node* node = new Node(this);
scene()->addItem(node);
node->setPos(x, y);
return node;
}
Я использую этот класс "g" в качестве центрального виджета в своем классе главного окна. Так что он работает как QGraphicsView.
Проблема в том, что когда я нажимаю среднюю кнопку на "области рисования" - точка создается, но не в том месте, где я щелкнул, - точка смещается. Зачем? Поэтому, когда я пытаюсь нарисовать эти точки нажатием средней кнопки - все они нарисованы не в том месте (не под моим курсором, они нарисованы слева и над моей позицией курсора).
Как я могу это исправить?
1 ответ
QGraphicsView
а также QGraphicsScene
имеют разные координатные пространства. Когда вы звоните setPos
, он должен быть в координатах сцены, но так как вы находитесь в событии вида мыши, ваши x и y будут в координатах вида.
Я подозреваю, что отображение ваших координат x и y в пространстве сцены должно решить проблему:
node->setPos( mapToScene(QPoint(x, y) );