PyQt: Der Versuch, die Grafikszene / -ansicht zu verstehen

8

Ich versuche, QGraphicsView und QGraphicsScene sinnvoll zu machen, insbesondere, wie man Grafikelemente platziert und sie dort erscheinen lässt, wo ich sie haben möchte. Ich bin auch verwirrt darüber, wenn Bildlaufleisten angezeigt werden, wenn die Szene größer als der Anzeigebereich ist.

Mit diesem Codebeispiel wird beispielsweise eine kleine Grafikansicht mit einer Ellipse in der oberen Ecke erstellt:

%Vor%

Wenn jedoch self.scene.setSceneRect(QtCore.QRectF(0, 0, 245, 245)) weggelassen wird, erscheint die Ellipse in der Mitte des Fensters, obwohl die Ellipse x, y = 0,0 hat. Ich bin mir nicht sicher warum! Gibt es einen Grund für dieses Verhalten?

Ebenso bin ich verwirrt über das Aussehen von Bildlaufleisten, wenn die Szenengröße größer als die Ansicht ist. Der folgende Code erstellt beispielsweise eine Ansicht / Szene mit mehreren Ellipsen, und itemsBoundingRect ist größer als sceneRect . Nur einige der Ellipsen werden angezeigt, aber es gibt keine Bildlaufleiste, um die verborgenen zu sehen. Sie müssen die Größe des Fensters erhöhen. Aber wenn Sie das tun, verschiebt sich die Platzierung der Ellipsen, so dass die x, y der Ellipsen ignoriert werden.

%Vor%

Wenn die Zeile self.scene.setSceneRect(QtCore.QRectF(0, 0, 200, 200)) weggelassen wird, wird eine Bildlaufleiste angezeigt. Aber auch hier werden die x, y-Positionen der Ellipsen ignoriert und in der Ansicht zentriert.

Was ich versuche, ist: eine Ansicht erstellen, in der die Elemente an die von mir gewünschte Position gelangen, und wenn die Anzahl der Elemente dazu führt, dass die Szene größer als die Ansichtsgröße ist, werden Bildlaufleisten nur für x, y angezeigt Positionen der zu pflegenden Objekte.

Ich habe das Gefühl, dass mir ein wichtiges Teil des Ansichts- / Szenenpuzzles fehlt ...

    
XandYandZ 29.02.2012, 03:38
quelle

2 Antworten

3

Aus dem Dokument

  

Wenn der Szenenrect nicht gesetzt ist, verwendet PySide.QtGui.QGraphicsScene den Begrenzungsbereich aller & gt; -Elemente, wie er von PySide.QtGui.QGraphicsScene.itemsBoundingRect () als Szenenrekt. zurückgegeben wird.

Damit wird das Bild als Ihre Szene rect gesetzt und die Mitte der Szene ist die Mitte des Widgets.

Die Bildlaufleisten erscheinen, wenn die Szene rect größer als die Widget-Größe ist. Wenn Sie die setSceneRect -Zeile auskommentieren, wird die Größe Ihrer Szene automatisch angepasst, aber wenn Sie die Zeile haben, werden Ihre Bilder über die Grenzen von scenRect hinaus hinzugefügt, sodass Sie Ihre sceneRect aktualisieren müssten, um sie anzuzeigen.

    
Jeff 29.02.2012, 06:12
quelle
1
%Vor%     
Joshua Kord 12.03.2015 01:17
quelle