如何在QGraphicsView中安装QGraphicsScene

时间:2012-06-05 05:17:24

标签: qt4

我想在QGraphicsScene中放入QGraphicsView不同的尺寸,以便根据视图的大小缩小或展开,并且不应该有任何滚动条。

4 个答案:

答案 0 :(得分:6)

这对我有用:

void MyGraphicsView::zoomToFit()
{
    fitInView(scene()->sceneRect(), Qt::KeepAspectRatio);
}

您可能希望adjust场景矩形有一点边距;可能看起来更好,取决于你的内容。

答案 1 :(得分:3)

缩小视图,如下所示:

view->scale(frameWidth / sceneWidth, frameHeight / sceneHeight);

答案 2 :(得分:2)

view->setSceneRect(0,0,view->frameSize().width(),view->frameSize().height());

将此段代码与resizeevent

Qgraphicsview相关联

如果将场景大小设置为大于视图的场景,则会出现滚动条。否则,如果将scene rect设置为等于视图框宽度或更小,则不会有滚动条。

然后我猜QGraphicsView::fitInView()是你的解决方案。:)

答案 3 :(得分:0)

我知道这不能回答问题,但这是在Google搜索如何使内容适合视图时的顶部。很简单:

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)