как центрировать спокойную mainform на экране?

Я попробовал их в конструкторе своего mainform:

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

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

но оба помещают правый нижний угол формы приблизительно в центре экрана, вместо того, чтобы центрировать форму. Какие-либо идеи?

7
задан David Burson 6 August 2010 в 14:51
поделиться

2 ответа

Я пробовал это в конструкторе моей основной формы

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

Когда объект создается впервые, он по существу позиционируется в (0,0) с ожидаемым (ширина, высота) , как таковой:

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

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

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

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

РЕДАКТИРОВАТЬ : С учетом сказанного, я полагаю, вы можете легко перемещать его по желанию, но для полноты я опускаю код Патриса , который не зависит от информации о геометрии кадра:

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

move(center.x() - width() * 0.5, center.y() - height() * 0.5);
12
ответ дан 6 December 2019 в 11:45
поделиться

Функция перемещения (см. QWidget doc) принимает в качестве параметра один QPoint или два int. Это соответствует координатам верхнего левого угла вашего виджета (относительно его родителя; здесь рабочий стол ОС). Попробуйте:

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

move(center.x()-width*0.5, center.y()-height*0.5);
4
ответ дан 6 December 2019 в 11:45
поделиться
Другие вопросы по тегам:

Похожие вопросы: