Der*_*rek 5 c++ mapping qt qt4
我试图弄清楚如何在我当前在 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 有很多映射函数,但我不确定如何检测哪些部分可见,以及如何在项目、场景和视图之间进行映射。
谢谢你的帮助
作为参考..到目前为止,这是我尝试过的:获取项目形状将形状映射到场景映射,使用视图从场景获取路径的边界矩形并找到该路径的左上角
最终使用了类似下面的东西:
QRect portRect = ui->graphicsView->viewport()->rect();
QRectF sceneRect = ui->graphicsView->mapToScene(portRect).boundingRect();
QRectF itemRect = item->mapRectFromScene(sceneRect);
QRectF isec = itemRect.intersected(item->boundingRect());
Run Code Online (Sandbox Code Playgroud)
谢谢朱棣文
QRect portRect = yourGraphicsView->viewPort()->rect();
QRectF sceneRect = yourGraphicsView->mapToScene(portRect);
QRectF itemRect = yourItem->mapRectFromScene(sceneRect);
Run Code Online (Sandbox Code Playgroud)
您可能想要将生成的矩形与项目的实际矩形进行交集,因为视口可能比项目大。