Нарисуйте сдвиг при рисовании в 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) );
Другие вопросы по тегам