QSplitter 拉伸因子的行为与正常的不同

QSplitter Stretching Factors behave differnt from normal ones

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

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

现在我将两个小部件都放在一个拆分器中(通过打破主布局,将两个小部件放在一个拆分器中并为主小部件设置一个新布局)。调整大小仍然有效,但拉伸因子表现怪异:

PlainTextEdit 似乎占用了太多 space。拉伸因子仍为 1:1。我找到了一个 workaournd,通过将上部小部件的拉伸更改为更高的值(在本例中 9:1),看起来又不错了:

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

QSplitter::setSizes() 可用于设置相对大小。根据文档,"any additional/missing space is distributed amongst the widgets according to the relative weight of the sizes".

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

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

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