2012-06-12 34 views
1

我有一個QVBoxLayout容器小部件。無法調整QVBoxLayout中的小部件

我有約100個小部件添加到VBoxLayout。他們都有相同的高度。 有些時候需要調整其中一行的大小。我調整了窗口小部件的大小(newWidth,newHeight)並調用QVBoxLayout上的layout(),但沒有任何變化。大小保持不變。

如何動態更改QVBoxLayout中的小部件的高度?

回答

5

在設計中插入佈局的小部件的大小調整是無操作的。佈局的大小小部件,而不是你。

如果您想在QVBoxLayout中使用固定高度的小部件,您必須設置小部件的最小和最大高度,並確保它的sizePolicy在垂直方向上不被忽略。

如果您想要一個具有所有其他小部件高度兩倍的小部件。將其延伸設置爲2,並將其他小部件延伸至1.致電layout->setStretch(index, stretch)。小部件將按照其延伸比例分配寬度。例如,在所有延伸爲1和一個延伸爲2的情況下,具有延伸2的小部件將獲得房間的兩倍。

其他所有東西都是平等的(這是重要的一點!),伸展與小部件的像素大小成比例。如果你想要的話,說所有的小部件高20像素,但一個是30像素高,就像這樣設置他們的延伸。

如果佈局具有確切的高度,以便所有小部件高度+間距+邊距的總和加起來到佈局高度,則會在佈局中獲取小部件的高度=拉伸。相反,如果從佈局高度開始,減去頂部和底部邊距以及(窗口小部件數量 - 1)*間距,則會留下小部件的高度。然後,您可以通過將拉伸設置爲期望的高度來手動分配小部件之間的高度。

您可能需要覆蓋小部件的sizePolicy(如果它們默認情況下太大)。

+0

謝謝,但沒有做任何事情。當我setStretch, – JasonGenX

+0

對我的小部件的高度沒有影響您是否在佈局中的所有小部件上調用它?您還應該將所有小部件的sizePolicy設置爲在兩個方向上都被忽略,至少在最初時是這樣。 –

+2

將兩個方向的設置尺寸策略設置爲「忽略」可改善事物。但我仍然收到了不好的結果。一個2的延伸,3的東西增長。當回到1時,事物永遠不會退縮。它不穩定。它只適用於其他所有小部件,並非全部。很奇怪的行爲。我沒有機會在沒有花費數週的情況下達到這種行爲的底部。我可能不得不設計我自己的自定義佈局。 Qt根本行不通。我很驚訝,在一個佈局中改變一個小部件的高度將是這樣一個博士級任務。 – JasonGenX