feste/variable Fenstergröße

Alles rund um die Programmierung mit Qt
Antworten
Label
Beiträge: 55
Registriert: 15. August 2008 10:03

feste/variable Fenstergröße

Beitrag 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
MiKla
Beiträge: 134
Registriert: 29. Juli 2007 15:29

Beitrag von MiKla »

schon mal mit probiert?

Code: Alles auswählen

void QWidget::setFixedSize ( int w, int h )
Label
Beiträge: 55
Registriert: 15. August 2008 10:03

Beitrag 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?
mathies
Beiträge: 149
Registriert: 9. Februar 2007 17:50
Wohnort: Erfurt

Beitrag 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.
Label
Beiträge: 55
Registriert: 15. August 2008 10:03

Beitrag 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.
Undefined
Beiträge: 34
Registriert: 19. Oktober 2006 17:12

Beitrag von Undefined »

QSizePolicy ist das was du suchst.

Code: Alles auswählen

myWidget->setSizePolicy ( QSizePolicy::Fixed, QSizePolicy::Fixed );
Label
Beiträge: 55
Registriert: 15. August 2008 10:03

Beitrag 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
Undefined
Beiträge: 34
Registriert: 19. Oktober 2006 17:12

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