Я попробовал их в конструкторе своего mainform:
QRect desktopRect = QApplication::desktop()->availableGeometry(this);
move(desktopRect.center() - frameGeometry().center());
QRect desktopRect = QApplication::desktop()->availableGeometry(this);
move(desktopRect.center() - rect().center());
но оба помещают правый нижний угол формы приблизительно в центре экрана, вместо того, чтобы центрировать форму. Какие-либо идеи?
Я пробовал это в конструкторе моей основной формы
Это, вероятно, проблема. Вероятно, на данный момент у вас нет действительной информации о геометрии, потому что объект не виден.
Когда объект создается впервые, он по существу позиционируется в (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);
Функция перемещения (см. 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);