我在 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/