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 回答