12

我想将 aQGraphicsScene放入QGraphicsView不同尺寸的 a 中,这样它会根据视图的大小缩小或扩大,并且不应该有任何滚动条。

4

4 回答 4

10

这对我有用:

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

您可能需要调整场景矩形以留出一点边距;可能看起来更好,具体取决于您的内容。

于 2014-10-08T22:43:45.927 回答
5

像下面这样缩放视图做需要的事情:

view->scale(frameWidth / sceneWidth, frameHeight / sceneHeight);
于 2012-06-11T07:37:32.917 回答
3
view->setSceneRect(0,0,view->frameSize().width(),view->frameSize().height());

将这段代码与resizeeventof连接起来Qgraphicsview

如果您设置的场景矩形大小大于视图滚动条,则会出现。否则,如果您将 scen rect 设置为等于或小于视图框架宽度,则不会出现滚动条。

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

于 2012-06-05T07:21:33.360 回答
0

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

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)
于 2019-05-07T00:31:42.430 回答