2012-05-21 145 views
6

有沒有辦法讓layoutStretch屬性始終服從?例如。我把它設置爲「1,3,2」,但是第一部分中的一個小部件(標籤)(「1,3,2」中的「1」)展開(當添加更多文本時),然後1:3:2配給不再受到尊重。也就是說,「1:3:2」比例變成更像「3:1:3」的東西。修復佈局的大小

回答

7

你應該看看屬性QWidget::sizePolicy。它控制佈局在更新幾何圖形時如何尊重其子節點的sizeHint()

所以,你需要做的是:請用三個子控件的水平sizePolicy設置爲QSizePolicy::Ignored佈局忽略子控件的水平sizeHints:

QLabel *label = ...; 
... 
label->setSizePolicy(QSizePolicy::Ignored, label->sizePolicy().verticalPolicy()); 

(第二個參數將確保當然,你應該設置每個子部件的大小策略,這個示例代碼僅用於標籤。)

請注意,您的佈局的內容必須是小部件;我認爲嵌套佈局不能被分配一個尺寸策略(但我可能是錯的)。至少使用QtDesigner,沒有辦法將大小策略應用到佈局本身(如果它不是小部件的佈局)。詳情請參閱評論。


在QtDesigner,您可以設置子控件這樣的sizePolicy:

前:
enter image description here
收縮:
enter image description here
選擇的項目佈局:
enter image description here
設定水平尺寸政策「忽略」:
enter image description here
結果:
enter image description here

+0

在QtDesigner我點擊了3個VerticalLayout的部件是在horizo​​ntalLayout插件的三個對象之一(具有1:3:2 layoutStretch的那個)。但是,沒有sizePolicy,只有layoutLeftMargin,layoutTopMargin,layoutRightMargin,layoutBottomMargin,layoutSpacing,layoutStretch和layoutSizeConstraint。 –

+0

@DavidDoria我爲QtDesigner添加了屏幕截圖。 – leemes

+0

對不起,我想我還不清楚。我有verticalLayout小部件,它們是horizo​​ntalLayout小部件的子項。這些verticalLayout小部件是我想要修復比例的那些,但它們沒有「sizePolicy」屬性。 –