QSplitter拉伸因子表现与正常表现不同

时间:2015-04-10 12:01:29

标签: qt qsplitter

我想创建一个灵活的布局,用户可以在其中调整窗口小部件的大小,但仍然提供良好的默认布局。我正在使用Qt Designer。

作为一个最小的例子,我使用了一个带有Widget和plainTextEdit的简单Windows。后者似乎引起了问题,这就是我选择它的原因。起初我是在没有Splitter的情况下构建的,它运行得很好。顺便说一下,拉伸因子是1:1。

enter image description here

现在我将两个小部件放在Splitter中(通过打破主要布局,将两个小部件放在Splitter中并将新布局设置到主小部件)。调整大小仍然有效,但拉伸因素表现得很奇怪:

enter image description here

PlainTextEdit似乎占用了很多空间。拉伸因子仍为1:1。我找到了一个workaournd,通过将上部窗口小部件的拉伸更改为更高的值(在本例中为9:1),再次看起来很好:

enter image description here

所以我的问题是:当我将图像放入Splitter时,为什么拉伸因子开始表现得很奇怪?如何在不使用任意猜测的拉伸因子的情况下解决这个问题?

1 个答案:

答案 0 :(得分:4)

QSplitter::setSizes()可用于设置相对大小。根据文档,"任何额外/缺失的空间根据大小的相对权重分布在小部件中。

在这种情况下,它有点难看,因为你必须在你的代码中添加它而不是在QDesigner中编辑你的布局(通常,你只想在一个地方定义你的布局),但它仍然很快和工作:

MyWindow::MyWindow(QWidget* parent):
QWidget(parent)
{
    m_Ui.setupUi(this);
    m_Ui.splitter->setSizes({2000, 1000, 1000});

然而,我不得不使用大数字(而不是{2,1,1}),也许是因为此时窗口尚未完全设置(显然,Qt不是RAII的忠实粉丝.. )。此外,这种表示法可能只适用于最近的C ++版本,否则您也可以在一些额外的行中定义QList。