Сдвиг рисования при рисовании в 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.

Проблема в том, что когда я нажимаю среднюю кнопку на "области рисования" - точка создается, но не в том месте, где я нажал - точка смещается. Почему? Поэтому, когда я пытаюсь нарисовать эти точки, нажимая среднюю кнопку - все они рисуются не в том месте (не под моим курсором, они рисуются левее и выше моего положения курсора).

Как я могу это исправить?


person Daniel    schedule 18.10.2012    source источник


Ответы (1)


QGraphicsView и QGraphicsScene имеют разные координатные пространства. Когда вы вызываете setPos, он должен быть в координатах сцены, но, поскольку вы находитесь в событии мыши в представлении, ваши x и y будут в координатах вида.

Я подозреваю, что сопоставление ваших координат x и y с пространством сцены должно решить проблему:

node->setPos( mapToScene(QPoint(x, y) );
person Chris    schedule 18.10.2012
comment
Да, это решило проблему. Спасибо, вы действительно хороши в Qt! - person Daniel; 19.10.2012