gpt4 book ai didi

c++ - 无法将 QGraphicsView 坐标映射到 QGraphicsScene

转载 作者:太空狗 更新时间:2023-10-29 23:07:50 24 4
gpt4 key购买 nike

我有一个 QGraphicsView 包含一个加载图像的 QGraphicsScene。我的应用程序所做的是让用户对这张图片进行注释,这样我就可以得到这张图片的用户注释区域的坐标信息。为了更容易理解,我制作了这张图片:

enter image description here

我想要的是基于图像坐标的精确坐标信息,因为我在场景中添加了pixmap,我认为图像和场景具有相同的坐标系。但是,QGraphicsView 和场景有不同的坐标,就像图片显示的那样,它们在我的电脑上宽 5pix,高 1pix(总是这样吗?)。

我使用 mapToScene功能,但我没有得到正确的坐标信息。

我在这里发布了一些代码。

scene = new QGraphicsScene();
scene->addPixmap (pixmapItem);
ui->graphicsView->setScene (scene);


void MainWindow::mousePressEvent(QMouseEvent *event)
{
if ((event->button() == Qt::LeftButton)&& beginAnnotation) {
.......

QPointF mousePoint = ui->graphicsView->mapToScene(event->pos());
qDebug() << mousePoint;
}
}

当我点击图像的左上角时,我希望我能得到 (0,0),但我得到的却是 (5,1)。

请帮帮我。

解决方案:

我认为@effjae 是对的。我的主窗口捕获了 mousrPressEvent。当我将图像加载到 View 包含的场景中时,我使用 ui->graphicsView->adjustSize(); ,所以,我认为 View 和场景共享相同的坐标系,对吗? ?为此,我将图片更新为:

enter image description here

现在,我接受 effjae 的建议。我在View上安装了一个eventFilter,现在mouseClick的坐标是基于View & Scene的。谢谢。

最佳答案

我认为您在这里遇到的问题是您的 mousePressEvent 来自您的主窗口,而不是实际的 QGraphicsView。 mousePressEvent 为您提供窗口的坐标,这包括任何边框或装饰。

要解决这个问题,您可以子类化 QGraphicsView 并在其中处理 mousePressEvent,其方式与您在 MainWindowClass 中的方式完全相同。

一个快速但可能不太吸引人的解决方案是在 QGraphicsView 上安装一个事件过滤器。使用 QObject 的方法 installEventFilter 来执行此操作。

关于c++ - 无法将 QGraphicsView 坐标映射到 QGraphicsScene,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11448861/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com