1

当应用程序启动但尚未构建时(当所有初始小部件正在创建等时),我添加到我的布局 a QSplitter,有两个小部件,我希望第二个小部件或多或少占据 60/70%可用空间,而第一个小部件占用其余空间(考虑到拆分器大小本身)。

所以,一开始,在窗口本身显示之前,我尝试或多或少地重新调整这两个小部件:

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_w并且second_w包含00,我不知道是因为尚未计算大小,还是因为尚未显示小部件(窗口未显示)并且不可见小部件的大小为0.

我该怎么做才能获得这些小部件的“未来”尺寸?位于splittera 内QVBoxLayout,并且所有者小部件的可用空间或多或少是窗口的所有垂直空间(QTabBar在小部件上方只有 a 拥有它QVBoxLayout,并且窗口中有一点填充)。

4

2 回答 2

1

根据文档,以下应该做正确的事情......

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

如果QSplitter是垂直的,则应将 30% 分配给顶部小部件,并将 70% 分配给下部小部件。

于 2016-12-13T18:51:38.233 回答
0

该方法QSplitter::sizes()似乎仅在显示小部件时才给出非零大小。我通常用来规避这个问题的方法是覆盖QWidget::showEvent(QShowEvent *event)并调用QSplitter::setSizes()那里的方法。

于 2016-12-14T15:31:32.300 回答