Wie man ein QWidget (oder QDialog) zentriert auf seinen parent-widget?
Will ich halten ein QWidget (oder QDialog) zentriert auf seinen parent-widget. Ist es wirklich erforderlich, um zu verbinden, um Signale von der übergeordneten widget oder gibt es einen einfacheren Weg (etwas zu setzen)?
- was haben Sie versucht? was würden die Signale, die zu tun haben mit dem halten Sie ein widget zentriert?
- versucht überschreiben von QWidget::moveEvent aber das zwingt mich zu ändern, das Eltern-widget
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich löste es, mich und nur um Antwort auf meine eigene Frage, wenn sich jemand finden es nützlich.
Halten Sie es in der Mitte:
... wo
waitDialog
ist eine Instanz meiner "Warten..." - Anzeige. Dies muss zum überschreiben dermoveEvent
- Methode des übergeordneten (hierMyMainWindow
).Wenn Ihr QWidget ist ein in-die-selben-Fenster Kind seiner Eltern, dann könnte man es hinzufügen, um die Eltern QLayout (z.B. QBoxLayout oder QGridLayout) mit den richtigen Einstellungen, um das layout zentriert.
Wenn es ein QDialog (oder einige andere QWidget, der seine eigene separat bewegliche Fenster der obersten Ebene), dann die QLayout Ansatz funktioniert nicht; was könnten Sie stattdessen tun, ist, überschreiben die übergeordnete widget ist resizeEvent () - Methode aufrufen, setGeometry() auf das Kind-Dialogfeld, so dass das Kind-dialog erhält seine position und/oder Größe jedes mal aktualisiert, wenn der Elternteil bekommt in der Größe verändert. Sie müssen möglicherweise auch, um das überschreiben der moveEvent () - Methode des übergeordneten top-level-Fenster, um zu erkennen, wenn der Benutzer bewegt hat, das übergeordnete Fenster, so dass Sie können verschieben Sie das Dialogfeld position zu entsprechen, die Bewegung. Ich bin mir nicht 100% sicher, dass dieses Verhalten würden Sie wirklich wollen, obwohl, da normalerweise der Benutzer erwartet in der Lage sein, sich zu bewegen-Dialoge über den Bildschirm, unabhängig von Ihrer übergeordneten Fenster.