2010-08-06 16 views
6

Próbowałem je w konstruktorze mojego MainForm za:jak wyśrodkować formułę Qt na ekranie?

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

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

ale zarówno umieścić w prawym dolnym rogu formularza na temat środka ekranu, zamiast centrowania formularza. Jakieś pomysły?

Odpowiedz

10

Próbowałem je w konstruktorze mojego MainForm za

to prawdopodobnie problem. Prawdopodobnie nie masz w tym momencie prawidłowych informacji o geometrii, ponieważ obiekt nie jest widoczny.

Gdy obiekt jest najpierw skonstruowany, to w zasadzie umieszczony w (0,0) ze to oczekuje (width,height), jako takich:

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

Ale po pokazano:

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

Zatem, nie można ale polegaj na informacjach o frameGeometry().

EDIT: Z powiedział, że przypuszczam, można łatwo przenieść go jako pożądany, ale dla kompletności mam wpaść Patrice's code, które nie zależą od informacji geometrii ramy:

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

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

Znalazłem, że działa, jeśli nazywam 'this-> resize (width_I_want, height_I_want)' przed kodem, aby go wyśrodkować. Dzięki! –

+0

To interesujące. Jak to zmienia geometrię ramy? –

3

Funkcja przesuwania (patrz dokument QWidget) przyjmuje jeden parametr QPoint lub dwa jako parametr. Odpowiada to współrzędnym lewego górnego rogu widgetu (w stosunku do rodzica, tutaj pulpit OS). Spróbuj:

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

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

Another rozwiązanie, zakładając, że okno w pytaniu 800 x 800:

QRect rec = QApplication::desktop()->availableGeometry(); 
move(QPoint((rec.width()-800)/2, (rec.height()-800)/2)); 
Powiązane problemy