如何通过鼠标单击在QGraphicsView上获取QGraphicsPixmapItem上的像素

时间:2014-01-17 23:07:56

标签: qt qgraphicsitem qgraphicsscene

我有一个带有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),右下角为(图像宽度,图像高度)。

1 个答案:

答案 0 :(得分:1)

QGraphicsView::mapToScene将屏幕坐标映射到场景坐标,然后使用QGraphicsView::itemAt获取项目,QGraphicsItem::mapFromScene将场景全局坐标映射到项目本地坐标。

当然,这些都是相反的。