hide widget und Grösse
hide widget und Grösse
Hallo,
in einem Widget ist eine Groupbox die mehrere Labels enthält. Die Labels haben alle eine fixierte Grösse ( setFixedSize(...) ). Im Normalfall lässt sich die Groupbox durch Verkleinern meines Fensters nur so lange verkleinern, bis die Labels gerade noch darin Platz haben (ist ja so gewollt). Sind meine Lables jedoch anfänglich "hidden" ( hide() oder setVisible(false) ) so kann ich die GroupBox weiter verkleinern.
Wie kann ich das Label unsichtbar machen, ohne dass meine Goupbox die Grösse dabei ändert?
Danke für jede Hilfe!
Osiris
in einem Widget ist eine Groupbox die mehrere Labels enthält. Die Labels haben alle eine fixierte Grösse ( setFixedSize(...) ). Im Normalfall lässt sich die Groupbox durch Verkleinern meines Fensters nur so lange verkleinern, bis die Labels gerade noch darin Platz haben (ist ja so gewollt). Sind meine Lables jedoch anfänglich "hidden" ( hide() oder setVisible(false) ) so kann ich die GroupBox weiter verkleinern.
Wie kann ich das Label unsichtbar machen, ohne dass meine Goupbox die Grösse dabei ändert?
Danke für jede Hilfe!
Osiris
Re: hide widget und Grösse
GroupBoxen haben auch ein setMinimumSize(...).osiris81 hat geschrieben:Wie kann ich das Label unsichtbar machen, ohne dass meine Goupbox die Grösse dabei ändert?
Re: hide widget und Grösse
Danke für die neuen Vorschläge, bin leider immer noch nicht überzeugt:
Habe ich bereits probiert, wenn ich allerdings die Höhe des Labels als MinimumSize setze, dann ist die Groupbox viel zu klein (die minimumSize bezieht sich ja auf die Grösse der Box selber, nicht den Platz darin) also müsste ich noch irgendeine Zahl (die bestimmt abhängig des Aussehens der Box ist) dazuzählen...macman hat geschrieben: GroupBoxen haben auch ein setMinimumSize(...).
Das macht das Label nicht unsichtbar.upsala hat geschrieben:Dann verwende halt setDisabled
Re: hide widget und Grösse
Verstehe ich jetzt nicht so ganz. Wenn deine Label alle eine feste Größe haben, dann kannst Du doch die Mindestgröße der Box berechnen. Margin und Spacing des Layouts sollte man nicht vergessen.osiris81 hat geschrieben:wenn ich allerdings die Höhe des Labels als MinimumSize setze, dann ist die Groupbox viel zu klein (die minimumSize bezieht sich ja auf die Grösse der Box selber, nicht den Platz darin) also müsste ich noch irgendeine Zahl (die bestimmt abhängig des Aussehens der Box ist) dazuzählen...
Re: hide widget und Grösse
Auch mit Margin (Spacing brauche ich doch nicht, da die Labels nebeneinander sind und ich nur die Höhe der GroupBox setzen müsste) des Layouts stimmt die Höhe nicht, die GroupBox hat ja innerhalb noch einen Rand mit der Beschriftung, das braucht auch Platz. Ich habe die Höhe nun wie folgt berechnet:macman hat geschrieben: Verstehe ich jetzt nicht so ganz. Wenn deine Label alle eine feste Größe haben, dann kannst Du doch die Mindestgröße der Box berechnen. Margin und Spacing des Layouts sollte man nicht vergessen.
Code: Alles auswählen
ui.groupBox->setMinimumHeight(
ui.label->height()
+ ui.groupBox->layout()->margin()
+ ui.groupBox->frameSize().height()
);
Dass man in Qt4 nicht einfach ein Label unsichtbar machen kann ohne dass sich das gesamte Layout verzieht finde ich schon etwas bedenklich..
Re: hide widget und Grösse
Wenn Du mit Spacern arbeitest, kannst Du auch noch vertikale Spacer einfügen. SizeTyp auf MinimumExpanding und SizeHint auf passende Höhe.
PS: Nächstes Mal die Bilder bitte in HD, damit sie garantiert nicht mehr auf meinen Monitor passen
Das ist der Sinn eines Layoutmanagers. Ist ja nicht so, das man das hinnehmen muss. Es gibt schon Möglichkeiten Größenbegrenzungen festzulegen.osiris81 hat geschrieben:Dass man in Qt4 nicht einfach ein Label unsichtbar machen kann ohne dass sich das gesamte Layout verzieht finde ich schon etwas bedenklich..
PS: Nächstes Mal die Bilder bitte in HD, damit sie garantiert nicht mehr auf meinen Monitor passen
Danke nochmals. Das mit dem SpacerItem funktioniert für meinen Fall.
Nun gibt es aber bereits das nächste Problem: An einer anderen Stelle wird die ganze GroupBox auf hidden gesetzt. Die GroupBox kann auch in einem Layout sein und ich könnte auch ein SpacerItem hinzufügen, nur leider weiss ich die Höhe der GroupBox nicht und der Wert von ui.groupBox->height() stimmt erst dann, wenn die GroupBox sichtbar ist (in meinem Beispiel dann 84, und vorher 30)...
Hier vielleicht noch eine Idee?
Nun gibt es aber bereits das nächste Problem: An einer anderen Stelle wird die ganze GroupBox auf hidden gesetzt. Die GroupBox kann auch in einem Layout sein und ich könnte auch ein SpacerItem hinzufügen, nur leider weiss ich die Höhe der GroupBox nicht und der Wert von ui.groupBox->height() stimmt erst dann, wenn die GroupBox sichtbar ist (in meinem Beispiel dann 84, und vorher 30)...
Hier vielleicht noch eine Idee?
Verstehe ich das richtig, Du willst die obere Groupbox verstecken und stattdessen leeren Raum im Dialog lassen?
Die deutsche Schriftsprache ist case-sensitive. Außerdem gibt es eine Interpunktionsnorm. Wenn manch einer seine Programme genauso schlampig schreibt, wie sein Posting hier, dann sollte er es lieber bleiben lassen.
Ja, das verstehst Du genau richtig!macman hat geschrieben:Verstehe ich das richtig, Du willst die obere Groupbox verstecken und stattdessen leeren Raum im Dialog lassen?
Das Besipiel hier ist nicht sinnvoll, es soll nur das Problem verdeutlichen. Die richtige GroupBox ist innerhalb einer anderen GroupBox.
Erzeuge ein QWidget mit einer fixen Grösse!osiris81 hat geschrieben:Ja, das verstehst Du genau richtig!macman hat geschrieben:Verstehe ich das richtig, Du willst die obere Groupbox verstecken und stattdessen leeren Raum im Dialog lassen?
Das Besipiel hier ist nicht sinnvoll, es soll nur das Problem verdeutlichen. Die richtige GroupBox ist innerhalb einer anderen GroupBox.
Diesem teilst du eine QLayout zu.
Dem QLayout widerum die QGroupBox.
Nun kannst du die Box hidden und der Platz bleibt gleich da in diesem Fall das Widget diesen in anspruch niemt.