2016-09-30 3 views
1

Ich verwende Grafikansicht Framework zum Hinzufügen von Elementen in der Laufzeit in die Ansicht. Die Elemente werden wie im vertikalen Layout untereinander platziert.Rand der Position des Artikels in QGraphicsView während der Größenanpassung

Ich platziere mein Objekt immer an der Startposition der Szene (10,10). aber während die Größe der Ansicht geändert wird, wird die Marge angepasst. Wie wird bei jeder Größenänderung des Ansichtsfensters der gleiche Rand beibehalten?

i gegoogelt und gefunden

QTransform Matrix(1, 0, 0, 0, 1, 0, 0, 0, 1); 
Matrix.scale(width()/sceneRect().width(), height()/sceneRect().height()) 
setTransform(Matrix); 

hilft, den Marge bei der Wiederherstellung, aber es schrumpft auch die auf der Ansicht Höhe Ration aus Artikeln.

Ich wollte immer die gleiche Artikelgröße beibehalten, selbst wenn das Ansicht-Widget verkleinert oder erweitert wird. Bildlaufleiste muss erscheinen.

Antwort

1

Die QGraphicsView ist ein Ansichtsfenster auf eine Szene. Sie erwähnen, dass Sie Dinge in die Ansicht einfügen, was Sie nicht tun. Sie fügen sie der Szene hinzu, und dann werden sie in der Ansicht angezeigt. Es mag sein, dass du das schon verstehst, aber nur um klar zu sein.

Was ich denke ist, dass Sie möchten, dass die Pixel-zu-Szene-Beziehung konstant bleibt und der Ursprung der Ansicht am Ursprung der Szene "hängen" soll . Du nennst einen Rand, aber so etwas ist nicht in der Szene-Ansicht-Beziehung eingebaut, also musst du dich selbst pflegen. Mit anderen Worten: Sie erstellen einen Rand in der Szene, indem Sie einfach keine Elemente dort platzieren. Anschließend müssen Sie die Ansicht so konvertieren, dass der Randbereich innerhalb der Szene immer im Ansichtsfenster der Ansicht liegt. Es ist der zweite Teil von dem, mit dem du Probleme hast.

Ich würde vorschlagen, dass Sie die Transformationsmatrix der Ansicht untersuchen, wenn Sie die Größe der Ansicht ändern. Die Werte m11 und m22 sind die Skalierungsfaktoren, die Ihnen zeigen, wie die Pixel der Ansicht auf die Szenenkoordinaten abgebildet werden, und dx und dy sind die Übersetzungsfaktoren, die Ihnen die Beziehung zwischen dem Ursprung der Szene und dem Ursprung der Szene zeigen.

+0

danke für die klare antwort. Ja, ich füge Artikel nur zur Szene hinzu. sagen wir, dass die Szenenkoordinate (0,0,1000,1000) ist, habe ich den Gegenstand bei QPoint (18,12) platziert, um eine Margenlücke zu erhalten. aber wenn ich das Ansichtsfenster verändere, nehmen diese Ränder zu. die Codezeilen, die ich hinzugefügt habe, werden helfen, den Rand zu erhalten, aber auch den Gegenstand zu skalieren, aber ich muss den Gegenstandsschrumpf ignorieren. – Wagmare

+0

Ich müsste den Code selbst schreiben, um absolut sicher zu sein, aber wenn Sie diese Transformationsmatrixwerte untersuchen, werden Sie feststellen, dass die Skalierungsfaktoren (m11 und m22) bei der Größenänderung der Ansicht erhalten bleiben sollen. Ich denke, du musst QGraphicsView ableiten und resizeEvent überschreiben und dort die QGraphicsView-Skalierungsfaktoren zurücksetzen. – goug

+0

sicher werde ich es tun goug .. danke dir so sehr. Ich werde gemäß Ihrer Empfehlung aktualisieren und Ihnen hier antworten. – Wagmare

Verwandte Themen