Wie Vorschau-Größen der widgets im layout-vor einem show()?
Wie kann ich eine Vorschau, was die Größe von widgets in einem Fenster werden nach den layout-Regeln angewendet werden, vor ich eigentlich show()
das widget-Fenster? Es scheint, alle Größen sind 100x30 vor, dass die ersten show()
Befehl. Wie kann ich das umgehen?
- Was brauchen Sie für diese?
- MEINE eigenen widget-Fenster-Klasse, prüft die Größe der Objekte und das hinzufügen von dynamischen widgets, die bei der Konstruktion der Zeit. Ich brauche zum Messen von Größen, wie die Dinge Aussehen wird, NACHDEM ein layout in dieser phase.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Den
invalidate()
für mich gearbeitet.Beachten Sie, dass wenn Sie Folgendes tun, es funktionieren würde, wie hier gefragt (zumindest scheint es in Ordnung zu sein in meinem code):
Diese nicht zeigen Sie das widget auf dem Bildschirm, da Sie nicht der Verzicht auf die Kontrolle zurück zu der Warteschlange, bis die
hide()
passiert. In zwischen, dieinvalidate()
berechnet den richtigen stellen.Für mich, die folgenden gearbeitet:
Dies ist wahrscheinlich nicht die gleiche wie Alexis' Antwort, aber es erfordert nicht zeigen-dann-versteckt das Fenster.
Könnten Sie versuchen Sie googeln für "qt-geometrie vor der show" zeigt einen thread mit dem Titel Kraft-geometrie-update von widget ausgeblendet auf qtcentre.org forum, wo man Lesen kann Wysota Antwort:
und diese
Verwenden QWidget::sizeHint, um die gewünschte Größe des top-level-widget basiert auf der sizeHints alle Kind-widgets und layouts. Oder rufen Sie QWidget::adjustSize tatsächlich führen Sie das layout und die Größe der gesamte widget-Baum. Beachten Sie, dass adjustSize begrenzen die top-level-Fenster auf 2/3 des Bildschirms, so dass Sie nicht bekommen, was Sie wollen, für große Fenster.
Habe ich versucht verschiedene Lösungen gepostet, die von anderen (
show
&hide
,update
&activate
,invalidate
undWA_WState_ExplicitShowHide
&WA_WState_Hidden
) aber keiner war richtig bei allen widgets, die ich hatte, zu zentrieren, BEVOR Sieshow()
in meiner Anwendung. Ich verbrachte Stunden zu Graben und mein problem war, dass falsche Größen zwischengespeichert wurden innerhalb QWidgetItemV2. Ein paar Minuten später und ich kam mit dieser: