2016-03-20 7 views
0

Ich verwende Qlabels, um einige Grafiken und Bilder (über setpixmap) zu plotten.QT-Layout-Manager stellt keinen Speicherplatz wieder her, wenn das Widget ausgeblendet wird, bis das Fenster verschoben wird

Mein Grundlayout ist:

QVBoxLayout Haupt Layout über QDialog des setLayout. QHBoxLayout (Array von QLabels) QLabel expandedPlot (optional erweitert Grundstück von einem der oben QLabels) QLabel Mainimage Hauptbildanzeige

Innerhalb der QDialogs keypress Event-Handler erneut implementiert, ich verstecke()/show() die erweiterte Handlung. Wenn ich den expandedPlot verberge(), stellt der Layoutmanager etwa die Hälfte der vertikalen Nutzung wieder her. Wenn ich dann das Fenster ziehe, stellt der Layout-Manager den Rest des vertikalen Raums wieder her (als ob kein Gegenstand vorhanden wäre).

Wie kann ich das Verhalten des Verschiebens des Fensters erzwingen? Ich möchte, dass der Layoutmanager den vertikalen Platz vollständig wiederherstellt.

Ich benutze Qt 5.6 auf Windows, aber wollen plattformübergreifende Lösungen. Vielen Dank, Mike

+0

Rufen Sie 'updateGeometry' auf dem versteckten Widget auf? Eine eingeschränkte Version Ihres Codes, die das Problem zeigt, würde diese Frage verbessern. – strubbly

+0

Nein - sieht aus wie 'updateGeometry' ist in diesem Fall ein No-Op. Probieren Sie "adjustSize" für das übergeordnete Element aus. – strubbly

+0

Hallo Strubbly, Danke. Das hat perfekt funktioniert. –

Antwort

0

Weil das Widget ist ziemlich teuer, Qt tut es nicht immer. Wenn Sie die Größe von eingeschlossenen Widgets ändern, müssen Sie wahrscheinlich updateGeometry aufrufen, um den Layout-Manager zu einem neuen Layout auszulösen. Aber wenn Sie das Widget ausblenden, tut updateGeometry nichts. In diesem Fall müssen Sie adjustSize im übergeordneten Widget aufrufen, das dann das Re-Layout auslöst.

Verwandte Themen