我在 Qt 中制作了一个 GUI,它基本上是一个带有 QGraphicsView 的小部件,我有一个功能:

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

它链接到公共(public)插槽:
  void mousePressEvent(QMouseEvent *event);

这在控制台上向我显示了我单击的位置的 x,y 坐标,但是目前这是在整个小部件上工作,我理想情况下希望 x,y(0,0) 成为 QGraphicsView 的左上角而不是整个小部件的左上角。有没有人知道如何进行这项工作,我从我的代码中认为这就是它在做什么,但事实证明并非如此,iv 现在环顾了一段时间,但我什么也没想到

任何帮助将不胜感激,谢谢。

最佳答案

重新实现 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 的父级。

关于c++ - QGraphicsView Qt 的点击事件,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16039020/

10-13 04:42