12

ビューのサイズに応じて縮小または拡大し、スクロールバーがないように、さまざまなサイズのにフィットQGraphicsSceneさせたいです。QGraphicsView

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());

このコードresizeeventQgraphicsview

ビューよりも大きいサイズでシーン長方形を設定すると、スクロールバーが表示されます。それ以外の場合、シーンをビューのフレーム幅以下に設定すると、スクロールバーは表示されません。

次に、 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 に答える