2011-02-04 49 views
3

如何設置QMainWindow的frameSize?QMainWindow set frameSize

爲了解釋我在做什麼,我需要滿足的要求是我的程序主窗口的高度等於屏幕高度減去任務欄;但寬度應該比現代寬屏幕顯示器的屏幕寬度小得多,所以我不能只是最大化窗口。

我可以找到屏幕高度減去任務欄沒有問題QApplication::desktop()->availableGeometry()。然而,使用此值在窗口上調用resize不起作用;據我所知,resize使內部佔據一定的空間,而不是使外部適合一定的空間。該文檔似乎建議相關窗口屬性爲frameSize,但不提供設置它的直接方式。我可以在resizeframeSize之間做一些試驗和錯誤的反饋,但是有沒有更優雅/習慣的方法來做到這一點?

回答

6

這並不複雜。看到here一個很好的圖。您可以使用frameGeometry()geometry()來獲取幀寬(水平和垂直),然後在調用resize()(或setFixedSize(),如果這對您更合適)之前,您可以從所需的幀大小中減去它們。

這可能出錯的唯一方法是如果幀寬度因調整大小而改變。讓我知道它是否有效!

+1

對,棘手的部分是frameGeometry沒有設置,直到第一次顯示窗口(顯然這不是API缺陷,Qt只是事先不知道,因爲窗口框架是由主機繪製的操作系統)。解決方法解決方案:首次運行程序時,將窗口顯示爲一個小框,等待與服務器連接(從用戶的角度來看是自然跳轉),然後調整屏幕高度。然後保存生成的窗口幾何圖形以供後續運行。 – rwallace 2011-02-06 00:04:15