2010-08-06 22 views
6

Ich habe versucht, diese in Konstruktor meiner Hauptform der:Wie zentriert man ein Qt-Hauptformular auf dem Bildschirm?

QRect desktopRect = QApplication::desktop()->availableGeometry(this); 
move(desktopRect.center() - frameGeometry().center()); 

QRect desktopRect = QApplication::desktop()->availableGeometry(this); 
move(desktopRect.center() - rect().center()); 

aber beide setzten die untere rechte Ecke des Formulars etwa in der Mitte des Bildschirms, sondern die Form Zentrierung. Irgendwelche Ideen?

Antwort

10

ich mein Main Konstruktor versucht haben, diese in

, die wahrscheinlich das Problem. Sie haben wahrscheinlich zu diesem Zeitpunkt keine gültigen Geometrieinformationen, da das Objekt nicht sichtbar ist.

Wenn das Objekt zuerst konstruiert wird, ist es im Wesentlichen bei (0,0) positioniert damit (width,height), als solche erwartet wird: nachdem sie gezeigt

frame geometry at construction: QRect(0,0 639x479) 

Aber:

frame geometry rect: QRect(476,337 968x507) 

So können Sie nicht aber verlassen Sie sich auf Ihre frameGeometry() Informationen.

EDIT: Mit dieser sagte, ich nehme an, Sie leicht wie gewünscht bewegen können, aber ich bin Fallenlassen in Patrice's code auf Vollständigkeit, die nicht auf den Rahmengeometrie Informationen abhängt:

Rect desktopRect = QApplication::desktop()->availableGeometry(this); 
QPoint center = desktopRect.center(); 

move(center.x()-width()*0.5, center.y()-height()*0.5); 
+0

Ich fand es funktioniert, wenn ich this-> resize (width_I_want, height_I_want) 'vor dem Code, um es zu zentrieren nennen. Vielen Dank! –

+0

Das ist interessant. Wie verändert das die Rahmengeometrie? –

3

Die Verschiebefunktion (siehe QWidget doc) benötigt einen QPoint oder zwei int als Parameter. Dies entspricht den Koordinaten der oberen linken Ecke Ihres Widgets (relativ zu seinem Elternteil; Here OS Desktop). Versuchen:

QRect desktopRect = QApplication::desktop()->availableGeometry(this); 
QPoint center = desktopRect.center(); 

move(center.x()-width*0.5, center.y()-height*0.5); 
0

Another Lösung in Frage das Fenster unter der Annahme ist 800 × 800:

QRect rec = QApplication::desktop()->availableGeometry(); 
move(QPoint((rec.width()-800)/2, (rec.height()-800)/2)); 
Verwandte Themen