1

私は問題があります。

私は 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 のように動作します。

問題は、「描画領域」の中央ボタンを押すと、ポイントが作成されますが、クリックした場所にはありません。ポイントがシフトします。なんで?そのため、中央ボタンを押してこれらのポイントを描画しようとすると、すべてが間違った場所に描画されます(カーソルの下ではなく、左左とカーソル位置の上に描画されます)。

どうすれば修正できますか?

4

1 に答える 1

4

QGraphicsViewQGraphicsScene異なる座標空間を持っています。を呼び出すときはsetPos、シーン座標にする必要がありますが、ビューのマウス イベントであるため、x と y はビュー座標になります。

x 座標と y 座標をシーン空間にマッピングすると、問題が解決するはずです。

node->setPos( mapToScene(QPoint(x, y) );
于 2012-10-18T21:19:14.893 に答える