Seite 1 von 1
breite einer QGraphicsScene nach der Skalierung
Verfasst: 8. Juni 2010 20:10
von anno1988
Wenn ich mir QGraphicsView "scale(1.05, 1.05)" aufrufe, wird die Ansicht innerhalt des QGraphicView Objekts vergrößert.
Wenn ich dann aber die neue Breite der QGraphicsScene zurück erhalten will, bekomme ich immer nur die Originalgröße zurück.
Wie bekomme ich denn die Breite nach der Skalierung heraus?
Verfasst: 8. Juni 2010 20:12
von franzf
Die scene ändert sich nicht, nur der Blick der View auf die scene.
Verfasst: 8. Juni 2010 20:31
von anno1988
wie wird denn da die Skalierung berechnet, wenn ich mehrfach scale ausführe?
Code: Alles auswählen
scale(1.05, 1.05);
scale(1.05, 1.05);
scale(1.05, 1.05);
scale(1.05, 1.05);
scale(1.05, 1.05);
scale(1.05, 1.05);
Hier führe ich es 6x aus. Wenn ich jetzt aber z.B. 1.05^6 rechte komme ich auf 1.34. Da ist die Originalbreite multipliziert mit diesem Faktor aber immer noch zu klein im Gegensatz zur skalierten Größe der QGraphicScene.
Kann es vielleicht auch sein, dass die Breite bzw. Höhe nach jedem skalieren neu mit 1.05 genommen wird. Hiere habe ich es jetzt ja so berechnet, dass ich immer von der Originalgröße ausgehe.
Verfasst: 8. Juni 2010 20:43
von franzf
anno1988 hat geschrieben:Kann es vielleicht auch sein, dass die Breite bzw. Höhe nach jedem skalieren neu mit 1.05 genommen wird. Hiere habe ich es jetzt ja so berechnet, dass ich immer von der Originalgröße ausgehe.
Höhe und Breite werden gar nicht angerührt! QGraphicsView hält eine QTransform, die beim Zeichnen angewandt wird. Und ein weiteres view.scale() scaliert einfach die aktuelle QTransform. Wenn diese schon skaliert ist, wird natürlich erneut von der bereits durchgeführten Skalierung weiter gemacht.
Was ist denn eigentlich dein Problem? Was willst du mit den exakten Berechnungen und zigmaligen scale() erreichen?
Verfasst: 8. Juni 2010 20:46
von anno1988
ich will einfach wissen wie breit das QGraphicScene nach der Skalierung ist. (also das was man sieht), nicht die originalgröße.
Verfasst: 8. Juni 2010 20:52
von franzf
Einfach eine passende Version von view.mapFromScene wählen (z.B. die mit QRectF), und ein passendes Argument übergeben (z.B. scene.sceneRect()).
Wie du von dem zurückgegebenen QRectF die Breite bekommst steht in der Doku.
Verfasst: 9. Juni 2010 19:19
von anno1988
wie sieht es denn da mit dem scale faktor aus den man übergibt?
wenn ich z.B. "1.25" eintrage ist dann die Ansicht wirklich auf 125% vergößert?
Verfasst: 9. Juni 2010 20:41
von upsala
Wenn du das gemacht hättest, was franzf dir vorgeschlagen hat, könntest du es ohne Probleme selbst rausfinden.
Verfasst: 9. Juni 2010 23:41
von anno1988
das habe ich auch gemacht. das funktioniert auch soweit.