как центрировать Qt mainform на экране?
Я пробовал это в конструкторе моей mainform:
QRect desktopRect = QApplication::desktop()->availableGeometry(this);
move(desktopRect.center() - frameGeometry().center());
QRect desktopRect = QApplication::desktop()->availableGeometry(this);
move(desktopRect.center() - rect().center());
но оба помещают нижний правый угол формы примерно в центр экрана, вместо центрирования формы. Есть идеи?
6 ответов
Я пробовал их в конструкторе моей mainform
это, вероятно, проблема. Вероятно, на данный момент у вас нет допустимой информации о геометрии, потому что объект не отображается.
когда объект впервые построен, он по существу расположен на (0,0)
С ожидается (width,height)
, например:
frame geometry at construction: QRect(0,0 639x479)
но, после того, как показано ниже:
frame geometry rect: QRect(476,337 968x507)
таким образом, вы еще не можете положиться на свой frameGeometry()
информация.
редактировать: С учетом сказанного, я полагаю, вы можете легко перемещать его по желанию, но для полноты я падаю в Патрис код который не зависит от информации геометрии кадра:
Rect desktopRect = QApplication::desktop()->availableGeometry(this);
QPoint center = desktopRect.center();
move(center.x()-width()*0.5, center.y()-height()*0.5);
функция перемещения (см. QWidget doc) принимает один QPoint или два int в качестве параметра. Это соответствует координатам верхнего левого угла вашего виджета (относительно его родителя; здесь OS Desktop). Попробуйте:
QRect desktopRect = QApplication::desktop()->availableGeometry(this);
QPoint center = desktopRect.center();
move(center.x()-width*0.5, center.y()-height*0.5);
#include <QStyle>
#include <QDesktopWidget>
window->setGeometry(
QStyle::alignedRect(
Qt::LeftToRight,
Qt::AlignCenter,
window->size(),
qApp->desktop()->availableGeometry()
)
);
PyQT Python Версия
# Center Window
desktopRect = QApplication.desktop().availableGeometry(self.window)
center = desktopRect.center();
self.window.move(center.x()-self.window.width() * 0.5,
center.y()-self.window.height() * 0.5);
availableGeometry()
устарела.
move(pos() + (QGuiApplication::primaryScreen()->geometry().center() - geometry().center()));
другое решение, предполагая, что рассматриваемое окно 800×800:
QRect rec = QApplication::desktop()->availableGeometry();
move(QPoint((rec.width()-800)/2, (rec.height()-800)/2));