6

当我.show()打开一个对话框时,它通常会显示在左边一点,我不知道为什么。我想将所有打开的对话框居中,所以我使用了:

qr = dlgNew.frameGeometry()
cp = QtGui.QDesktopWidget().availableGeometry().center()
qr.moveCenter(cp)
dlgNew.move(qr.topLeft())

并且:

sG = QtGui.QApplication.desktop().screenGeometry()
x = (sG.width()-dlgMain.width()) / 2
y = (sG.height()-dlgMain.height()) / 2

dlgMain.move(x,y)
dlgMain.show()

我的问题是,哪种是正确/更好的使用方式,有什么区别?

4

2 回答 2

7

如果您没有明确指定位置,Qt 将让操作系统的窗口管理器决定将窗口放置在哪里。在您的情况下,“向左一点”是您的窗口管理器决定的。

至于这两种方法,有一些不同之处。

首先,.availableGeometry().screenGeometry(). .screenGeometry()为您提供屏幕的整个矩形。其中.availableGeometry(),返回可用的矩形。这是排除某些永久组件(如 Windows 中的任务栏)的区域。(解释差异的文档

其次,.frameGeometry()width()/height(). .frameGeometry()返回窗口在屏幕上占据的总面积。另一方面,width()/height()返回不包括窗口框架、标题栏等的窗口width的和。(解释差异的文档height

考虑到这些,我想说第一种方法更合适。

于 2012-09-14T22:53:48.833 回答
2

根据文件;

对话框始终是顶级小部件,但如果它有父级,则其默认位置位于父级顶级小部件的顶部(如果它本身不是顶级)。它还将共享父级的任务栏条目。

我不确定您是否只想在启动时将主窗口居中,但如果您想将模态对话框居中,您可以简单地通过调用使主窗口成为模态对话框的父窗口...

setParent (self, QWidget parent)

或者从 init 开始

__init__ (self, QWidget parent =YOUR_MAIN_WINDOW_HERE)

希望有帮助!

于 2016-11-22T08:45:08.537 回答