我有一个带有QGraphicsPixmapItem的QGraphicsScene,显示图像。我还有一个显示场景的视图。我定义了一个mousePressEvent()函数,在视图上查找鼠标点击。
视图设置为包含像素图:
//pixmap is a QGraphicsPixmapItem *
view->fitInView(pixmap, Qt::KeepAspectRatio);
我可以在视图的坐标系中点击鼠标的位置:
//e is my QMouseEvent *
QPoint local_pt = view->mapFromGlobal(e->globalPos());
现在我想使用QGraphicsView,QGraphicsScene,QGraphicsPixmapItem的任意组合将此点映射到原始图像坐标
我试过了pixmap->boundingRect()
,它给了我一个QRectF(0,0 778x582),它有适当的尺寸(原始图像),但我看不出x和y坐标是如何相关的到点击的本地点。
如何在原始图像坐标中获得鼠标单击的位置?
编辑:
这最终起作用:
//e is my QMouseEvent *
QPoint local_pt = view->mapFromGlobal(e->globalPos());
QPointF img_coord_pt = view->mapToScene(local_pt);
单击图像左上角时,img_coord_pt为(0,0),右下角为(图像宽度,图像高度)。
答案 0 :(得分:1)
QGraphicsView::mapToScene将屏幕坐标映射到场景坐标,然后使用QGraphicsView::itemAt获取项目,QGraphicsItem::mapFromScene将场景全局坐标映射到项目本地坐标。
当然,这些都是相反的。