3

Qt で GUI を作成しました。これは基本的に QGraphicsView を備えたウィジェットであり、機能があります。

void GUI::mousePressEvent(QMouseEvent *event)
{
    if(event->button() == Qt::LeftButton)
    {
        QPointF mousePoint = ui->graphicsView->mapToScene(event->pos());
        qDebug() << mousePoint;
    }
}

公開スロットにリンクします:

  void mousePressEvent(QMouseEvent *event);

これは、クリックした場所の x、y 座標をコンソールに表示しますが、現在、これはウィジェット全体で機能しており、理想的には x、y(0,0) を QGraphicsView の代わりに左上にしたいと考えています。ウィジェット全体の左上。誰かがこれを機能させる方法を知っていますか、私は自分のコードからこれがやっていることだと思っていましたが、そうではないことが判明しました。

どんな助けでも本当に感謝します。

4

1 に答える 1

4

mousePressEvent(QMouseEvent *event)あなたのウィジェットではQGraphicsViewないものの再実装は、それを行う「適切な」方法です。それ以外の場合は、次の方法でハッキングできます。

// Detect if the click is in the view.
QPoint remapped = ui->graphicsView->mapFromParent( event->pos() );
if ( ui->graphicsView->rect().contains( remapped ) )
{
     QPointF mousePoint = ui->graphicsView->mapToScene( remapped );
}

これは、ウィジェットが の親であることを前提としていますQGraphicsView

于 2013-04-16T14:10:37.063 に答える