2016-12-13 159 views
0

當應用程序啓動但尚未建設時(當所有初始小部件正在創建等)時,我添加到我的佈局QSplitter,有兩個小部件,我想第二個小部件或多或少地佔用可用空間的60/70%,而第一小部件佔用空間的其餘部分(考慮到分隔器大小本身)。Qt:QSplitter,重做大小

所以,在開始的時候,本身顯示的玻璃窗前,我嘗試更多或更少的重新調整這兩個控件那樣:

splitter->setOrientation(Qt::Vertical); 
auto sizes = splitter->sizes(); 

int& first_w = sizes.front(); // == 0 
int& second_w = sizes.last(); // == 0 
int diff = form_w * 2.3 - tbl_w; (30% * 2.3 = ~70%) 

second_w += diff; 
first_w -= diff; 

splitter->setSizes(sizes); 

但是,first_wsecond_w包含00,我不不知道是否由於尺寸尚未計算,或者因爲窗口小部件尚未顯示(窗口不是),並且不可見小部件的尺寸是0

我能做些什麼來獲得這些小部件的「未來」尺寸? splitter位於QVBoxLayout之內,並且所有者窗口小部件的可用空間或多或少都是窗口的所有垂直空間(窗口上只有擁有QVBoxLayout的窗口部件上方的QTabBar以及一些填充)。

回答

0

按照docs以下應該做正確的事...

splitter->setSizes(QList<int>() << 30 << 70); 

如果QSplitter是垂直的應分攤30%到頂部部件和70%低。

+0

不,它不起作用(我有測試)。該值以像素爲單位設置我認爲的大小,並且由於它們之間有很多可用空間可供分配,所以這些值完全被'sizeHint'替代。有問題的小部件是一個'QTextEdit',它的內部需要太多的垂直空間。 –

0

方法QSplitter::sizes()只有在顯示小部件時纔會給出非零大小。我通常會做的以避免這個問題是覆蓋QWidget::showEvent(QShowEvent *event)並在那裏調用方法QSplitter::setSizes()

+0

沒錯!我沒有想過。但我認爲將一個插槽連接到「顯示」信號將是一個更好的方法,但是,哦!沒有「顯示」信號! –