2010-08-06 3 views
6

Я попробовал это в конструкторе моего MainForm в:Как центрировать основную форму Qt на экране?

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

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

но и поставить нижний правый угол формы примерно в центре экрана, вместо центрирования формы. Есть идеи?

ответ

10

Я попробовал это в конструкторе моего MainForm в

Это, скорее всего проблема. На данный момент у вас, вероятно, нет действительной геометрии, потому что объект не отображается.

Когда объект первого построен, он по существу расположен в (0,0) с этим ожидается (width,height), как таковой:

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

Но, после того, как показано ниже:

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

Таким образом, вы не можете но полагайтесь на свою информацию frameGeometry().

EDIT: С учетом сказанного, я полагаю, вы можете легко перемещать его по своему желанию, но для полноты картины я снижается в Patrice's code, который не зависит от информации геометрии рамы:

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

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

Я нашел, что это работает, если я назову 'this-> resize (width_I_want, height_I_want)' перед кодом, чтобы центрировать его. Благодаря! –

+0

Это интересно. Как это изменит геометрию рамки? –

3

Функция перемещения (см. QWidget doc) принимает один параметр QPoint или два int в качестве параметра. Это соответствует координатам верхнего левого угла вашего виджета (относительно его родительского элемента, здесь OS Desktop). Try:

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

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

другой решение, предполагая, что окно в вопросе 800 × 800:

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