【发布时间】:2012-07-12 09:30:23
【问题描述】:
我有一个 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 & 场景的。谢谢。
【问题讨论】:
标签: c++ qt qt4 coordinates qgraphicsview