找出QGraphicsItem的哪个部分在QGraphicsView中可见

时间:2011-01-21 21:31:34

标签: c++ qt qt4 mapping

我试图找出如何在QGraphicsView中当前可以看到的像素与QGraphicsItem图像中的实际像素之间进行映射。

例如,如果我的查看器是50x50而我的图像是100x100,那么当图像加载并且不受影响时,图像的0,0像素对应于查看者的0,0像素。

现在,如果我将图像拖动到右边10个像素,那么图像的左上角0,0像素,现在是(10,0),我只能看到原始图像的10-40列。

此外,如果我缩放以缩小,使图像缩小到QGraphicsView区域,可能0,0的图像映射到10,0的查看器,但100,100的图像可能只映射到40,40在观众中,因为我把它缩小了。

我知道QGraphicsItem有很多映射函数,但我不知道如何检测哪些部分是可见的,以及如何在Item,Scene和View之间进行映射。

感谢您的帮助

供参考..到目前为止,我已尝试过: 获取项目形状 将形状映射到场景 使用视图来自场景的mape 获取路径的边界矩形并找到该

的左上角

使用以下内容结束:

    QRect portRect = ui->graphicsView->viewport()->rect();
    QRectF sceneRect = ui->graphicsView->mapToScene(portRect).boundingRect();
    QRectF itemRect = item->mapRectFromScene(sceneRect);

    QRectF isec = itemRect.intersected(item->boundingRect());

谢谢stephen chu

1 个答案:

答案 0 :(得分:2)

QRect portRect = yourGraphicsView->viewPort()->rect();
QRectF sceneRect = yourGraphicsView->mapToScene(portRect);
QRectF itemRect = yourItem->mapRectFromScene(sceneRect);

您可能希望使用项目的实际矩形对结果矩形进行intersection,因为视口可能比项目大。