我有一个 QGraphicsView 包含一个加载图像的 QGraphicsScene 。我的应用程序所做的是让用户注释此图像,以便我可以获得此图像的用户注释区域的坐标信息。为了更容易理解,我制作了这张图片:
我想要的是基于图像坐标的确切坐标信息,因为我在场景中添加了像素图,我认为图像和场景具有相同的坐标系。但是,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 是对的。我的 mainWindow 捕获 mousrPressEvent。当我将图像加载到 View 包含的场景中时,我使用ui->graphicsView->adjustSize();
,所以,我认为 View 和 Scene 共享相同的坐标系,对吗?出于这个原因,我将图片更新为:
现在,我接受 effjae 的建议。我在 View 上安装了一个 eventFilter,现在 mouseClick 的坐标是基于 View & Scene 的。谢谢你。