【问题标题】:How to get pixel on QGraphicsPixmapItem on a QGraphicsView from a mouse click如何通过鼠标单击在 QGraphicsView 上的 QGraphicsPixmapItem 上获取像素
【发布时间】:2014-02-07 11:27:44
【问题描述】:

我有一个 QGraphicsScene,上面有一个 QGraphicsPixmapItem,显示一个图像。我也有一个显示场景的视图。我定义了一个 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),右下角为 (image width, image height)。

【问题讨论】:

    标签: qt qgraphicsitem qgraphicsscene


    【解决方案1】:

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

    当然也有相反的情况。

    【讨论】:

    • 谢谢。最终起作用的是view->mapToScene(local_pt)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-26
    • 1970-01-01
    相关资源
    最近更新 更多