2012-01-08 52 views
5

當我有一個帶有網格佈局的QMainWindow時,當用鼠標調整它的大小時,它不會低於某些必需的最小尺寸,以使其正確顯示所有控件。在我的應用程序中,我有時會以編程方式隱藏控件,但是窗口仍然保持相同大小,其餘控件看起來分散,它們之間的空間太大。我最終手動調整了對話框的大小,因此看起來並不難看。如何以編程方式將QMainWindow調整爲其最小尺寸

是否可以將對話框的垂直尺寸設置爲最小值當手動調整大小後隱藏了控件?

+0

+1我這個沮喪過。 – 2012-01-08 08:45:43

+0

剛剛計算出來,請參閱下面的答案。 – sashoalm 2012-01-08 13:54:02

回答

0

這段代碼就可以了(它會調整隻是高度):

QWidget widget; 
    widget.resize(widget.width(), widget.minimumHeight()); 
+0

這與widget.resize(widget.width(),1)有什麼不同?'0和1之間是否有區別? (我是一個新手,正如你可以明顯告訴的那樣。) – 2012-01-08 19:20:15

+0

你的意思是說widget.minimumHeight()返回0嗎?我假定它返回所有控件所需的最小尺寸,但我沒有檢查函數返回的實際值。 – sashoalm 2012-01-12 13:15:12

+0

這很有幫助,因爲在使用Dock小部件時,可以獲取頂部/底部停靠小部件的高度,然後將MainWindow的最小大小設置爲當前高度減去您希望隱藏的停靠小部件的高度。 – guitarpicva 2017-11-16 21:48:16

1

QLayout::SizeConstraint,QWidget::minimumSizeHint,QWidget::minimumSize之間有層次結構,您可以在文檔中找到它。

  • QWidget::minimumSize默認情況下未設置。當它超過時,它優先於 QWidget::minimumSizeHint
  • QWidget::minimumSizeHint如果窗口小部件不在佈局中(意味着它可以通過鼠標調整到0),則無效,否則使用佈局定義的窗口。
  • QLayout::SizeConstraint保存它*直接管理的小部件的默認佈局行爲。如果在佈局B中嵌套佈局A,則添加到A的所有窗口小部件都將使用其屬性。另外,如果B中的小工具W定義了其自己的佈局,則此佈局約束是要應用於小工具W的佈局約束。

知道了,請按照下列步驟操作。它可能工作,我沒有嘗試:):

  • 你所使用的所有部件的最小尺寸。
  • 確保所有佈局的大小限制設置爲QLayout::SetDefaultConstraint
2

我發現,調整在QMainWindowcentralWidget然後調整的QMainWindow本身的伎倆。換句話說:

from PyQt4 import QtGui 
class MyMainWindow(QtGui.QMainWindow): 
    def __init__(self): 
     # define some widgets and stuff 
    def whenWidgetsAreHidden(self): 
     # this method should be triggered when you hide your widgets 
     self.centralWidget.adjustSize() 
     self.adjustSize() 

注意,有在QMainWindowLayout其他部件。根據Qt Documentation的這張圖片,還有Dock Widgets和其他可能存在的東西。我只使用centralWidget,所以這個解決方案適合我。

QMainWindow Layout

相關問題