将Qt子窗口相对于父窗口居中显示

4
我有一个QMainWindow,它创建了多个QDialog子窗口,并将自身设置为它们的父窗口。当只有一个显示器时,一切正常,窗口正确地居中于当前显示器。但是当我有多个显示器时,子窗口倾向于在主显示器上打开,而不是在QMainWindow当前所在的显示器上打开。

请注意,我的窗口必须能够导航到其父窗口之外(它们每个都设置了Qt.Window标志)。

因此,如何相对于其父窗口位置(即在QMainWindow上居中)居中小部件以避免它们在其他地方打开?

这是我目前用于居中我的窗口的内容:

def centerOnScreen(widget):
    desktopWidget = QApplication.desktop()
    screenRect = desktopWidget.availableGeometry(widget)
    widget.move(screenRect.center() - widget.rect().center())

你使用的操作系统、窗口系统和窗口管理器是什么? - casualcoder
2个回答

4

您的代码似乎是实现期望行为的不错尝试。以下是两个建议:

  1. 尝试直接查找QMainWindow的左侧、顶部、宽度和高度,而非使用桌面参数。
  2. 在调用Exec方法之前,使用这些几何信息将您的对话框移动(以及可能地调整大小)到应用程序的中心。

希望能对您有所帮助。


3

引用Qt的文档,"桌面可能由多个屏幕组成,因此尝试在桌面的几何图形中居中某些小部件是不正确的。"

所以,正如您所看到的,Qt本身说这是一种不正确的居中小部件的方法。

正如@kroonwijk建议的那样,我建议使用您的QMainWindow的geometry()进行居中。

如果您无法在此小部件的范围内获取主窗口的访问权限,则可以使用QApplication :: topLevelWidgets来获取顶级小部件。然后,您可以使用一些技巧(例如元信息)来获取您的主窗口。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接