qt: seitenverhältnis bei bildern beibehalten
-
hallo,
mein programm soll mehrere bilder immer in voller breite anzeigen. dazu habe ich eine qscrollarea mit widgetResizable = true. die scroll area besitzt ein qwidget, bei dem ich setHorizontalSizePolicy(QSizePolicy::Ignored) aufrufe. damit werden die bilder immer in voller breite gezeigt. allerdings stimmt das seitenverhältnis gar nicht mehr. dabei habe ich jetzt schon mit folgenden sachen experimentiert:
- setVerticalSizePolicy auf anderen wert
- von qlabel ableiten (das bild wird mit einem qlabel dargestellt) und heightForWidth überschreiben, und SizePolicy.heightForWidth = true.wie macht man das denn?
vielen dank im vorraus
-
Die einfachste Art, ein Bild anzuzeigen, geht normalerweise über ein QLabel.
Wahrscheinlich wird das einfachste sein, dass du eine eigene Klasse, von QLabel abgeleitet, schreibst, wo du das resizevent implementierst.
Darin holst du dir die neue Größe und skalierst das Pixmap (QPixmap::scaled(), gib SmoothTransform an...) und weist es dem Label zu.Die ganzen Labels legst du in ein QVBoxLayout, weist es einem Widget zu und übergibst es via QScrollArea::setWidget() an die ScrollArea.
Sollte eigentlich das machen was du willst.
-
franz schrieb:
Die einfachste Art, ein Bild anzuzeigen, geht normalerweise über ein QLabel.
Wahrscheinlich wird das einfachste sein, dass du eine eigene Klasse, von QLabel abgeleitet, schreibst, wo du das resizevent implementierst.
Darin holst du dir die neue Größe und skalierst das Pixmap (QPixmap::scaled(), gib SmoothTransform an...) und weist es dem Label zu.Die ganzen Labels legst du in ein QVBoxLayout, weist es einem Widget zu und übergibst es via QScrollArea::setWidget() an die ScrollArea.
Sollte eigentlich das machen was du willst.das mit dem qpixmap funktioniert super. meine klasse speichert das original, weil das bild sonst irgendwann verwaschen aussieht. der rest hat nicht geklappt. ich hatte das auch schon genaus so gebaut, aber die bilder werden nicht mehr richtig maximiert. ich ändere jetzt auf mausklick das bild.
-
Suchst Du evtl QScrollArea::setWidgetResizable ?
-
hellihjb schrieb:
Suchst Du evtl QScrollArea::setWidgetResizable ?
nein, das benutze ich die ganze zeit über schon, damit das bild maximiert wird. leider sehe ich jetzt erst, dass immer noch nicht klappt, wenn das bild zu breit wird. das scheint qt überhaupt nicht zu interessieren!!
was mache ich denn verkehrt? ich mache doch schon was da http://doc.trolltech.com/4.3/widgets-imageviewer.html steht. aber ich will nicht solange zoomen bis es passt, sondern so das die breite gleich ist.