2011-09-11 28 views
3

我有一個QMainWindow,它創建多個QDialog子窗口並將自己設置爲它們的父項。當有一臺顯示器時,一切正常,並且窗口在當前顯示器中正確居中。但是當我有多個監視器時,子窗口傾向於在主監視器上打開,而不是在QMainWindow當前所在的監視器上。中心Qt子窗口相對於父項

請注意,我的窗戶必須能夠在其父級之外進行導航(它們每個都具有設置的Qt.Window標誌)。因此,我如何將一個窗口小部件相對於它的父窗口居中(即以QMainWindow爲中心),以避免窗口在其他地方打開?

以下是我目前使用居中我的窗戶:

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

你使用的是什麼操作系統,窗口系統和窗口管理器? – casualcoder

回答

3

您的代碼似乎是一個很好的嘗試,以實現所需的行爲。兩個建議:

  1. 而不是採取桌面參數,嘗試直接找到您的QMainWindow的左,頂部,寬度和高度。
  2. 在調用Exec方法之前,使用此幾何信息可將對話框移到(並可能調整大小)到應用程序的中心。

希望有所幫助。

2

要詢價Qt的documentation 「桌面可以由多個屏幕,所以它是不正確的,例如,試圖居中在桌面上的幾何一些小部件。」

所以,你可以看到Qt本身說這是一個不正確的方法來居中一個小部件。

作爲@kroonwijk建議我會說要麼使用您的QMainWindow的幾何()爲居中。

如果您無法在此窗口小部件的作用域中獲取主窗口的訪問權限,則獲取頂級窗口小部件的一種方法是使用QApplication::topLevelWidgets。然後你可以使用一些技巧(如元信息)來獲得你的主窗口。