Ich habe dieses Beispielcode:
%Vor%Ich führe es aus und wenn moreButton geklickt hat, erscheint oder verschwindet die ComboBox. Die Größe von Dialog ändert sich ebenfalls. Aber wenn ich die Methode zu ändern:
%Vor%(um die Anfangsgröße festzulegen, wenn Combo ausgeblendet ist) funktioniert die Größenanpassung nicht. Wenn ich jedoch auf resizeButton klicke - was mit der gleichen Methode verbunden ist - funktioniert die Größenanpassung richtig.
Ich weiß, dass es andere Möglichkeiten gibt, ein solches Ergebnis zu erzielen (zB. layout.setSizeConstraint (QLayout.SetFixedSize)), aber ich möchte die Größe explizit deklarieren.
Was mache ich falsch?
Meine Vermutung ist, dass Sie versuchen, die QDialog
zu skalieren, bevor sie Zeit hat, ihre Größe nach dem Ausblenden von Inhalten anzupassen. Wenn also resize
aufgerufen wird, hat es eine minimumSize
, die sicherstellt, dass die Schaltflächen und die Combobox sichtbar sind. Wenn du es nach einiger Zeit nennst , hat es jetzt richtig miminumSize
und reagiert richtig.
Eine schnelle Lösung überschreibt minimumSize
vor der Größenänderung manuell:
Aber wenn ich das angehen würde, würde ich die Verwaltung der Größenanpassung einfach dem Layout überlassen und sizeConstraint
verwenden. Das ist, was diese Layouts für sowieso.
Diese Frage und die Antworten waren in meiner Situation hilfreich: Automatische Größenanpassung eines QDialogs mit QLayout / QVBoxLayout, das eine QLabel mit Inhalt / Nachricht variabler Größe an den Benutzer enthält, während der Doppelpfeilcursor am Rand des gesamten QDialog-Containers vermieden wird . Die sizePolicy des Dialogs selbst wurde auf Fixed gesetzt und dennoch würden die Pfeile erscheinen, obwohl sie nicht in der Größe verändert werden können (würde sich nicht bewegen). Und obwohl das innere Layout automatisch / magisch die Größe ändert, hat die Verwendung von SetFixedSize auf dem Layout (Überraschung, Überraschung) die lästigen Doppelpfeile des gesamten QDialogs verschwinden lassen.
%Vor%... und jetzt passt sich das Dialogfeld dem Volumen an, das im Etikett enthalten ist, aber der Dialog selbst ist (scheinbar) nicht in der Größe des Benutzers veränderbar, was gut für Informationen und Fehlermeldungen ist.
schien mir nicht einleuchtend, also dachte ich, dass es wert wäre, hier für andere hinzukommen.
Ein bisschen mehr Detail ...
hast du das versucht? es sei denn, ich missverstehe das, was du tun willst.
%Vor%edit: Die endgültige Antwort ist layout3.setSizeConstraint (QLayout.SetNoConstraint)