Hallo zusammen!
Ich bastel mir gerade nen kleinen Favoritenmanager, in dem man Shortcuts zu all seinen Lieblingsprogrammen und Dateien anlegen kann.
Im Moment bin ich an der Positionierung dieses Programms welches aus einem QMenu besteht. Dazu muss ich unter anderem die Größe des Widgets abfragen, aber ich werd nicht ganz schlau...
Da bei der Positionierung so manches mal ein seltsames Ergebnis rauskam, hab ich mir beim durchdebuggen einfach mal die Breite und die Höhe des Widgets zurückgeben lassen. Also im Konstruktor meines von QMenu abgeleiteten Widgets mit width() und height(). Naja das Menü ist so circa 80 - 100 Pixel breit, beim durchdebuggen steht da allerdings ein Wert um die 640 Pixel drin. Das gleiche mit der Höhe, die ist etwa 480 und.... hmm moment... da fällt mir auf: Die Größe des Menus wird mit 640 auf 480 angegeben. Wie kann das sein? Ich habe mich an diesem Teil der Doku orientiert, deswegen verwirrt es mich dass ich 640 und 480 Pixel an Breite und Höhe zurückgegeben bekomme.
Noch zur Info: Das QMenu ist Anfangs bis auf einen Eintrag "Manage Favorites" leer, wird dann mit Actions aus einer DB gefüllt. Danach frage ich Höhe und Breite ab und bekomme diese 640 auf 480, von denen ich nur 400 auf 100 sehe. Eben so, wie so ein Menu nunmal aussieht.
Was hab ich da bei der Widget-Geometry falsch verstanden?
Anhang: Screenshot
[gelöst] Rückgabe der Widgetgröße
-
Exasperation
- Beiträge: 186
- Registriert: 11. März 2009 18:00
- Wohnort: VS
[gelöst] Rückgabe der Widgetgröße
- Dateianhänge
-
- Unbenannt.PNG (21.31 KiB) 3742 mal betrachtet
Zuletzt geändert von Exasperation am 2. August 2010 12:55, insgesamt 3-mal geändert.
Re: Rückgabe der Widgetgröße
Der CTor ist ein schlechter Platz für solche Initialisierungen, weil da das Layout noch nicht fertig gerendert wurde. Du bist daher schlicht und einfach zu früh dran mit solchen Abfragen.Exasperation hat geschrieben: Da bei der Positionierung so manches mal ein seltsames Ergebnis rauskam, hab ich mir beim durchdebuggen einfach mal die Breite und die Höhe des Widgets zurückgeben lassen. Also im Konstruktor meines von QMenu abgeleiteten Widgets mit width() und height(). Naja das Menü ist so circa 80 - 100 Pixel breit, beim durchdebuggen steht da allerdings ein Wert um die 640 Pixel drin. Das gleiche mit der Höhe, die ist etwa 480
Siehe:
http://www.qtforum.de/forum/viewtopic.php?t=7715
hth..
-
Exasperation
- Beiträge: 186
- Registriert: 11. März 2009 18:00
- Wohnort: VS
Schonmal danke für die Info. Naja das komische ist, dass ich diese Abfrage als allerletztes im C'tor mach, vorher werden in versch. Funktionen die Actions festgelegt. Dann soll in Abhängigkeit von der Größe des Widgets die Position berechnet werden.
Zur Erklärung: Standardmäßig geht das Menü wie ein Start- oder Kontextmenü am Mauszeiger auf. Ragt es allerdings über den Bildschirm Rand hinaus soll, es entsprechend neu positioniert werden, wie man es von anderen Menüs auch kennt.
Ich schau mir den anderen Thread mal an.
Zur Erklärung: Standardmäßig geht das Menü wie ein Start- oder Kontextmenü am Mauszeiger auf. Ragt es allerdings über den Bildschirm Rand hinaus soll, es entsprechend neu positioniert werden, wie man es von anderen Menüs auch kennt.
Ich schau mir den anderen Thread mal an.
-
Exasperation
- Beiträge: 186
- Registriert: 11. März 2009 18:00
- Wohnort: VS
Ein kleiner Test hat Klarheit gegeben 
Hab einfach mal in meiner main funktion nach dem Anlegen meines Menüs auf dessen Größen zugegriffen und siehe da: Da kommen 162 auf 414 Pixel raus.
Merke: Ein Widget ist erst konstruiert wenn der Kontruktor wirklich fertig konstruiert hat.
/EDIT: Hab die automatische Positionierung meines Widgets jetzt fertig implementiert und ein bisschen getestet und dabei stellte sich heraus, dass erst mit dem Aufruf von show() die endgültige Größe des Widgets berechnet wird. Ab sofort kann man Menu damit nicht mehr über den Bildschirmrand lappen
Hab einfach mal in meiner main funktion nach dem Anlegen meines Menüs auf dessen Größen zugegriffen und siehe da: Da kommen 162 auf 414 Pixel raus.
Merke: Ein Widget ist erst konstruiert wenn der Kontruktor wirklich fertig konstruiert hat.
/EDIT: Hab die automatische Positionierung meines Widgets jetzt fertig implementiert und ein bisschen getestet und dabei stellte sich heraus, dass erst mit dem Aufruf von show() die endgültige Größe des Widgets berechnet wird. Ab sofort kann man Menu damit nicht mehr über den Bildschirmrand lappen
-
Exasperation
- Beiträge: 186
- Registriert: 11. März 2009 18:00
- Wohnort: VS
-
Exasperation
- Beiträge: 186
- Registriert: 11. März 2009 18:00
- Wohnort: VS
Ich versuche jetzt beim Aufruf des polish events mit der dann vorhandenen Größe meine Positionen zu berechnen.
Allerdings wird da dann wieder seltsames übergeben. 480 und 800. Wenn ich die Größe nach meinem show() abfrage sind es aber die korrekten 162 auf 416.
Code: Alles auswählen
bool main_window::event( QEvent * e )
{
int res = QWidget::event( e );
if( e->type() == QEvent::Polish )
{
set_position( width(), height() );
return true;
}
return res;
}