我有一个QMainWindow,它创建多个QDialog子窗口并将自己设置为父窗口。当有一个监视器时,一切正常,窗口在当前监视器中正确居中。但是当我有多个监视器时,子窗口往往在主监视器上打开,而不是在QMainWindow当前所在的监视器上打开。
请注意,我的窗口必须能够在其父窗口之外导航(它们各自都设置了Qt.Window标志)。
那么,我如何将一个小部件相对于它的父位置(即以QMainWindow为中心)居中,以避免它们在其他地方开放呢?
以下是我目前使用的窗口中心:
def centerOnScreen(widget):
desktopWidget = QApplication.desktop()
screenRect = desktopWidget.availableGeometry(widget)
widget.move(screenRect.center() - widget.rect().center())
答案 0 :(得分:3)
您的代码似乎是实现理想行为的良好尝试。两个建议:
希望有所帮助。
答案 1 :(得分:2)
引用Qt的documentation “桌面可能由多个屏幕组成,因此例如,尝试将某些小部件置于桌面几何体中是不正确的。”
因为你可以看到Qt本身说这是一种不正确的方法来集中一个小部件。
正如@kroonwijk建议的那样,我要么使用QMainWindow的几何()进行居中。
如果您无法在此窗口小部件的范围内获取主窗口的访问权限,则获取顶级窗口小部件的一种方法是使用QApplication::topLevelWidgets。然后,您可以使用一些技巧(例如元信息)来获取主窗口。