how to center a Qt mainform on the screen?

橙三吉。 提交于 2020-02-26 17:38:08

问题


I've tried these in my mainform's constructor:

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

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

but both put the bottom right corner of the form at about the center of the screen, instead of centering the form. Any ideas?


回答1:


I've tried these in my mainform's constructor

That's likely the problem. You probably don't have valid geometry information at this point because the object isn't visible.

When the object is first constructed, it's essentially positioned at (0,0) with it's expected (width,height), as such:

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

But, after being shown:

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

Thus, you can't yet rely on your frameGeometry() information.

EDIT: With that said, I presume you can easily move it as desired, but for completeness I'm dropping in Patrice's code which doesn't depend on the frame geometry information:

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

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



回答2:


The move function (see QWidget doc) takes one QPoint or two int as parameter. This corresponds to the coordinates of the top-left corner of your Widget (relative to its parent; Here OS Desktop). Try:

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

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



回答3:


#include <QStyle>
#include <QDesktopWidget>

window->setGeometry(
    QStyle::alignedRect(
        Qt::LeftToRight,
        Qt::AlignCenter,
        window->size(),
        qApp->desktop()->availableGeometry()
    )
);

https://wiki.qt.io/How_to_Center_a_Window_on_the_Screen




回答4:


availableGeometry() is deprecated.

move(pos() + (QGuiApplication::primaryScreen()->geometry().center() - geometry().center()));



回答5:


PyQT Python Version

# 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);   



回答6:


Another solution, assuming the window in question is 800×800:

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


来源:https://stackoverflow.com/questions/3424918/how-to-center-a-qt-mainform-on-the-screen

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!