2011-11-14 62 views
2

我有以下部件佈局:的Qt:如何防止一些圖標,從獲得滾動條

HBox 
- VBox 
    - HBox 
     widget "A" 
     widget "B" 
    - widget "C" 
- widget "D" 

換句話說,我有這樣的事情:

+-----+--------------+ 
| A |    | 
+-----+  C  | 
| B |    | 
+-----+--------------+ 
|   D   | 
+--------------------+ 

根據內容,「A」和「B」需要擴展並消耗盡可能多的垂直空間,而不顯示任何滾動條。 「D」可以根據需要進行合同。

我試着將「A」和「B」的sizePolicy()設置爲「Minimum」,並根據它們顯示的內容爲「A」和「B」實現了sizeHint()。不過,我仍然看到「A」和「B」中的滾動條,而「D」的空間比它需要的多。

我也試過「minimumExpanding」爲sizePolicy(),但我仍然看到滾動條。

如何確保空間可用,「A」和「B」獲得優惠待遇,以避免滾動條出現?

回答

0

您可以將A和B的minimumHeightminimumWidth屬性設置爲沒有滾動條的最小可能值。他們仍然能夠擴張,但不會縮小到這個規模以下。

[編輯:] 重新閱讀您的問題後,我意識到您的A和B的內容並不總是具有相同的大小。很明顯,只有在知道內容大小發生變化時,上述方法纔有可能。在這種情況下,您可以從代碼中撥打setMinimumHeight()/setMinimumWidth()setMinimumSize()

+0

我想你的建議幾乎什麼,即後我想出多少高度需要,將其設置爲最小高度。但是,它似乎並不奏效。我會試着看看我是否可以放入一個最簡單的示例並將其發佈到此處。 –

+0

當我試圖將一個最小的例子放在一起時,我發現了這個問題。事實證明,有一個小部件(深入「D」),它本身設置了自己的minimumHeight。 –

1

使用Expanding作爲尺寸政策AB。對於小部件'D',每當A和/或B的內容發生變化時,您應該調整其大小。它的尺寸政策應該是最小的,你應該使用setMinimumHeight

如果一個小部件有滾動條,那麼它應該繼承QAbstractScrollArea。您可以使用setHorizontalScrollBarPolicysetVerticalScrollBarPolicy以禁用滾動條:

A->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff); 
B->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff); 
+0

當「A」和/或「B」的大小發生變化時,必須設置「D」的大小感覺有點不對。這引入了「A」和「D」之間不必要的依賴關係。如果我後來從「D」更改爲其他小部件,我將不得不修改代碼。我會盡力的。 如果我可以在A/B上設置尺寸策略,那將會很好。 –