Seite 1 von 1

feste/variable Fenstergröße

Verfasst: 6. Oktober 2008 13:50
von Label
Hallo alle zusammen!

Ich habe ein relativ simples Problem, bin aber selber noch nicht auf eine passende Lösung gekommen:

Und zwar habe ich ein Fenster. Dieses Fenster soll vom Benutzer nicht skalierbar sein, d.h. er soll es nicht in der Größe ändern können indem er mit der Maus auf den Rand klickt und zieht.
Allerdings soll sich das Fenster selber in der Größe ändern können.
Angenommen der User drückt einen Knopf, so soll sich das Fenster vergrößern. Drückt er ihn nochmal, soll es wieder kleiner werden.

Ich habe es schon mit setMaximumHeight() probiert, aber das funktioniert nicht weil die Größe des Fensters dann dauerhaft auf diese Größe fixiert ist.
Wenn ich also setMaximumHeight(250) mache und irgendwann später z.B. resize(300, 300) mache dann wird das Fenster zwar 300 Pixel breit aber nur 250 Pixel hoch.

Gibt es dafür eventuell schon einen Befehl den ich bis jetzt nicht gefunden habe oder hat jemand eine Idee wie ich das realisieren kann?

Vielen Dank schonmal

MfG Label

Verfasst: 6. Oktober 2008 14:54
von MiKla
schon mal mit probiert?

Code: Alles auswählen

void QWidget::setFixedSize ( int w, int h )

Verfasst: 6. Oktober 2008 15:03
von Label
Danke für die Antwort aber: ja das habe ich auch ausprobiert.
Da ist leider der selbe Effekt wie oben.
Da die Fenstergröße dann fixiert ist lässt es sich dann gar nicht mehr ändern ... irgendwelche anderen Ideen?

Verfasst: 6. Oktober 2008 15:08
von mathies
das sollte mit setGeometry(x, y, width, height) für das entsprechende Widget gehen. x und y kannste ja lassen und dann würdest mit

setGeometry( this->x(), this->y(), neueBreite, neueHoehe );

das Widget entsprechend anpassen.

Hoffe das hilft.

PS: setFixedSize() musst Du dann natürlich auch auf die entsprechenden neuen Werte setzen.

Verfasst: 6. Oktober 2008 15:40
von Label
So habe ich es bis jetzt auch lösen wollen, allerdings mit resize() anstatt setGeometry().
Ich habe es jetzt nochmal mit setGeometry() ausprobiert aber das macht keinen Unterschied.

Wie gesagt, das Problem ist: wenn ich mit setFixedSize() oder setMaximumSize arbeite, wird die Fenstergröße fixiert. D.h. sie kann nicht mehr geändert werden. Auch nicht durch ein erneutes setFixedSize().
Sie muss aber variabel bleiben damit sich das Fenster selber in der Größe ändern kann.

Das beste wäre es, dem Benutzer die Möglichkeit zu nehmen die Fenstergröße zu ändern. Weder ziehen am Rahmen, noch Maximieren des Fensters sollen funktionieren.

Verfasst: 7. Oktober 2008 22:55
von Undefined
QSizePolicy ist das was du suchst.

Code: Alles auswählen

myWidget->setSizePolicy ( QSizePolicy::Fixed, QSizePolicy::Fixed );

Verfasst: 8. Oktober 2008 12:17
von Label
Das hört sich schon ganz gut an
Das hab ich jetzt mal ausprobiert und auch ein bisschen in der Doku nachgelesen.
In der Doku steht unter QSizePolicy::Fixed: "The QWidget::sizeHint() is the only acceptable alternative, so the widget can never grow or shrink ..."

sizeHint() gibt mir aber QSize(-1,-1) zurück.
Mein Problem ist jetzt: Auf welche Variablen bezieht sich sizeHint() bzw. wie kann ich diesen Wert ändern, sodass bei sizeHint() meine gewünschte Fenstergröße zurückgegeben wird?

Danke schonmal

Verfasst: 8. Oktober 2008 19:44
von Undefined
Wie in der Doku schon beschrieben ist der wert nicht mehr vorhanden (sizeHint) wenn fixed gesetzt ist.
Es gibt aber noch andere Möglichkeiten das ganze zu beschränken in dem setMinimumWidth(int) setMaximumWidth(int) verwendest. Damit hast du wieder die Möglichkeit auf die Widget Geometrie zu zugreifen.