2016-10-19 6 views
0

Ich habe ein Fenster mit einem Layout und einem QLabel. Das QLabel enthält ein Bild. Das Bild sollte das Elternlayout von QLabel füllen. Sollte der Benutzer entscheiden, das Fenster zu verkleinern, sollte das Bild verkleinert werden, bis es eine Mindestgröße erreicht hat - zu diesem Zeitpunkt sollte das Fenster nicht länger skalierbar sein. Sollte der Benutzer entscheiden, das Fenster zu vergrößern, sollte das Bild wachsen. In beiden Fällen sollte das Seitenverhältnis des Bildes erhalten bleiben.Qt QLabel Scale Image mit Fenster

Ich habe es geschafft, die QLabel Eltern mit dem Bild mit setScaledContents zu füllen. Die Mindestgröße scheint jedoch immer die Originalgröße der Bilddatei zu sein, nichts, was ich definiere - wenn ich versuche, sie über QPixmap.scaled() zu definieren, wird das Bild extrem pixelig. Und obwohl ich das Bild vergrößern kann, wird das Seitenverhältnis niemals beibehalten.

Ich fühle, als ob das ziemlich einfach sein sollte, aber ich bin sehr verloren. Hilfe!

Antwort

1

Verwenden Sie setMinimumSize und setSizePolicy mit einem Minimum von size policy, dies sollte verhindern, dass das Label unter die von Ihnen festgelegte Mindestgröße schrumpft.

Die Erhaltung des Seitenverhältnisses ist etwas komplizierter. Speichern Sie die Pixmap des Bildes, das Sie zeichnen möchten, als eine Membervariable für das QLabel. Als nächstes implementieren Sie das Paint-Ereignis für das Label neu, damit Sie die Skalierung des Pixmap selbst vornehmen können. Wenn Sie this-> size() im Paint-Event aufrufen, erhalten Sie den Bereich, in dem die Pixmap gezeichnet werden soll. Rufen Sie scaled auf Ihrem Pixmap mit dieser Größe und Qt :: KeepAspectRatio, dann setzen SiePixmap auf Ihrem Etikett. Schließlich rufen Sie QLabel :: paint_event auf.