hide widget und Grösse

Alles rund um die Programmierung mit Qt
Antworten
osiris81
Beiträge: 19
Registriert: 23. Juli 2008 14:10

hide widget und Grösse

Beitrag von osiris81 »

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
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag von upsala »

QStackedWidget und ein zusätzliches leeres Widget verwenden.
osiris81
Beiträge: 19
Registriert: 23. Juli 2008 14:10

Beitrag von osiris81 »

Hi,

Vielen Dank erstmals!

Wenn ich nun aber 10 Labels in der GroupBox habe, muss ich dann jedes einzelne in ein QStackedWidget packen mit einem zusätzlichen leeren Widget?

Das scheint mir etwas aufwändig und der Code für andere nachher wahrscheinlich auch etwas unverständlich...
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag von upsala »

Dann verwende halt setDisabled
macman
Beiträge: 1738
Registriert: 15. Juni 2005 13:33
Wohnort: Gütersloh
Kontaktdaten:

Re: hide widget und Grösse

Beitrag von macman »

osiris81 hat geschrieben:Wie kann ich das Label unsichtbar machen, ohne dass meine Goupbox die Grösse dabei ändert?
GroupBoxen haben auch ein setMinimumSize(...).
osiris81
Beiträge: 19
Registriert: 23. Juli 2008 14:10

Re: hide widget und Grösse

Beitrag von osiris81 »

Danke für die neuen Vorschläge, bin leider immer noch nicht überzeugt:
macman hat geschrieben: GroupBoxen haben auch ein setMinimumSize(...).
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...
upsala hat geschrieben:Dann verwende halt setDisabled
Das macht das Label nicht unsichtbar.
macman
Beiträge: 1738
Registriert: 15. Juni 2005 13:33
Wohnort: Gütersloh
Kontaktdaten:

Re: hide widget und Grösse

Beitrag von macman »

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...
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
Beiträge: 19
Registriert: 23. Juli 2008 14:10

Re: hide widget und Grösse

Beitrag von osiris81 »

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.
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:

Code: Alles auswählen

ui.groupBox->setMinimumHeight( 
		  ui.label->height() 
		+ ui.groupBox->layout()->margin()
		+ ui.groupBox->frameSize().height()
);
Dies stimmt allerdings auch nicht, so ist die GroupBox etwas zu hoch...

Dass man in Qt4 nicht einfach ein Label unsichtbar machen kann ohne dass sich das gesamte Layout verzieht finde ich schon etwas bedenklich..
osiris81
Beiträge: 19
Registriert: 23. Juli 2008 14:10

Beitrag von osiris81 »

Hier noch ein Beispiel wie sich das Problem äussert (vorerst nur ein Label)

Links: Label sichtbar
Rechts: Label unsichtbar
Unten: Layout
Dateianhänge
grpbox.jpg
grpbox.jpg (74.27 KiB) 6584 mal betrachtet
macman
Beiträge: 1738
Registriert: 15. Juni 2005 13:33
Wohnort: Gütersloh
Kontaktdaten:

Re: hide widget und Grösse

Beitrag von macman »

Wenn Du mit Spacern arbeitest, kannst Du auch noch vertikale Spacer einfügen. SizeTyp auf MinimumExpanding und SizeHint auf passende Höhe.
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..
Das ist der Sinn eines Layoutmanagers. Ist ja nicht so, das man das hinnehmen muss. Es gibt schon Möglichkeiten Größenbegrenzungen festzulegen.

PS: Nächstes Mal die Bilder bitte in HD, damit sie garantiert nicht mehr auf meinen Monitor passen :-)
osiris81
Beiträge: 19
Registriert: 23. Juli 2008 14:10

Beitrag von osiris81 »

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?
macman
Beiträge: 1738
Registriert: 15. Juni 2005 13:33
Wohnort: Gütersloh
Kontaktdaten:

Beitrag von macman »

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.
osiris81
Beiträge: 19
Registriert: 23. Juli 2008 14:10

Beitrag von osiris81 »

macman hat geschrieben:Verstehe ich das richtig, Du willst die obere Groupbox verstecken und stattdessen leeren Raum im Dialog lassen?
Ja, das verstehst Du genau richtig!

Das Besipiel hier ist nicht sinnvoll, es soll nur das Problem verdeutlichen. Die richtige GroupBox ist innerhalb einer anderen GroupBox.
macman
Beiträge: 1738
Registriert: 15. Juni 2005 13:33
Wohnort: Gütersloh
Kontaktdaten:

Beitrag von macman »

Ich hatte mal ein ähnliches Problem und musste da mit SizePolicy und dynamischen Min/Max-Werten arbeiten. Ist etwas Fummelei, geht aber :-)
Hulk2442
Beiträge: 115
Registriert: 10. Januar 2007 13:44

Beitrag von Hulk2442 »

osiris81 hat geschrieben:
macman hat geschrieben:Verstehe ich das richtig, Du willst die obere Groupbox verstecken und stattdessen leeren Raum im Dialog lassen?
Ja, das verstehst Du genau richtig!

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!
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.
Antworten