Resizing + Höhe relativ zur Breite

Alles rund um die Programmierung mit Qt
Antworten
romankreisel
Beiträge: 4
Registriert: 22. Oktober 2007 09:12
Kontaktdaten:

Resizing + Höhe relativ zur Breite

Beitrag von romankreisel »

Hallo allerseits,

seit längerer Zeit versuche ich (bisher leider mit wenig bis gar keinem Erfolg) ein Widget so einzustellen, dass die Höhe und Breite immer relativ zueinander sind.
Ergo: vergrössert man die Breite, so ändert sich die Höhe (nach einem festgelegten Faktor) auch. Hab dazu natürlich auch schon die heightForWidth() überschrieben und mit QSizePolicy und setHeightForWidth und hasHeightForWidth rumgespielt, aber es halt bisher alles nicht zum erfolg geführt.

Leider hab ich auch weder in der qt-Doku, noch hier im Forum existierenden Code gesehen, der sich dieses Problem behandelt.


Ich würde mich um eine Antwort, sei es auch nur eine Referenz wo man Beispielcode finden kann, sehr freuen.


Gruß
Roman
macman
Beiträge: 1738
Registriert: 15. Juni 2005 13:33
Wohnort: Gütersloh
Kontaktdaten:

Beitrag von macman »

Damit wenigstens einer antwortet :-) Ungefähr so:

Code: Alles auswählen

void myWidget::resize( int w, int h )
{
	if (w > h)
		w = h;
	else if (w < h)
		h = w;

	setGeometry(x(), y(), w, h);
}
Aber wahrscheinlich hast Du es inzwischen selbst heraus bekommen.
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.
Sephral
Beiträge: 201
Registriert: 1. Februar 2006 09:40
Kontaktdaten:

Beitrag von Sephral »

Hallo,

als mit "einstellen" hab ich es auch nicht geschafft.

Ich musste letztendlich QWidget::resizeEvent(...) überschreiben und dort dafür sorgen, dass das richtige Seitenverhältnis gesetzt wird, damit klappte es dann aber auch.

Ciao,
Sephral
romankreisel
Beiträge: 4
Registriert: 22. Oktober 2007 09:12
Kontaktdaten:

Beitrag von romankreisel »

hab soeben mal resizeEvent überschrieben, jedoch ergibt sich daraus keine positive Änderung (einzige Änderung die mir auffält: er ignoriert natürlich mein "hasHeightForWidth", ist auch klar, ich hab ja was dies betrifft nicht den alten code reimplementiert)

Mal davon abgesehen sagt die Qt-Doku aus, dass eine Änderung der "geometry"-Eigenschaft ein resizeEvent auslöst. Ich denke die Gefahr ist nicht gering, dass man hierbei in einer endlosschleife endet.


Gruß
Roman
Sephral
Beiträge: 201
Registriert: 1. Februar 2006 09:40
Kontaktdaten:

Beitrag von Sephral »

Mit der Eindlosschleife hast du recht, kann man aber durch ein Flag umgehen das du setzt, wenn die letzte Änderung von Deinem Code ausgelöst wurde. Kommt ein Resize-Event und das Flag ist aktiv, dann wird das Event ignoriert.

Ich weiß, ist kein schöner Code, aber es funktioniert :-)


Ciao,
Sephral
romankreisel
Beiträge: 4
Registriert: 22. Oktober 2007 09:12
Kontaktdaten:

Beitrag von romankreisel »

Nachtrag:
ein Hübscher satz aus http://doc.trolltech.com/3.3/qwidget.html#geometry-prop:
Warning: Calling setGeometry() inside resizeEvent() or moveEvent() can lead to infinite recursion.
Antworten