我想把一个具有不同尺寸的QGraphicsScene
适应到一个QGraphicsView
中,使其根据视图的尺寸缩小或扩大,并且不应该出现任何滚动条。
我想把一个具有不同尺寸的QGraphicsScene
适应到一个QGraphicsView
中,使其根据视图的尺寸缩小或扩大,并且不应该出现任何滚动条。
void MyGraphicsView::zoomToFit()
{
fitInView(scene()->sceneRect(), Qt::KeepAspectRatio);
}
view->scale(frameWidth / sceneWidth, frameHeight / sceneHeight);
view->setSceneRect(0, 0, view->frameSize().width(), view->frameSize().height());
QGraphicsView
的resizeEvent
连接起来。QGraphicsView::fitInView()
就是你的解决方案。我知道这并没有回答问题,但是当搜索如何将内容适应视图时,它出现在谷歌的顶部。简单来说:
def fit_contents(self):
items = self.scene().items()
rects = [item.mapToScene(item.boundingRect()).boundingRect() for item in items]
rect = min_bounding_rect(rects)
self.setSceneRect(rect)
min_bounding_rect 是什么:
def min_bounding_rect(rectList):
if rectList == []:
return None
minX = rectList[0].left()
minY = rectList[0].top()
maxX = rectList[0].right()
maxY = rectList[0].bottom()
for k in range(1, len(rectList)):
minX = min(minX, rectList[k].left())
minY = min(minY, rectList[k].top())
maxX = max(maxX, rectList[k].right())
maxY = max(maxY, rectList[k].bottom())
return QRectF(minX, minY, maxX-minX, maxY-minY)