我试图找出如何在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
答案 0 :(得分:2)
QRect portRect = yourGraphicsView->viewPort()->rect();
QRectF sceneRect = yourGraphicsView->mapToScene(portRect);
QRectF itemRect = yourItem->mapRectFromScene(sceneRect);
您可能希望使用项目的实际矩形对结果矩形进行intersection,因为视口可能比项目大。