我想创建一个灵活的布局,用户可以在其中调整窗口小部件的大小,但仍然提供良好的默认布局。我正在使用Qt Designer。
作为一个最小的例子,我使用了一个带有Widget和plainTextEdit的简单Windows。后者似乎引起了问题,这就是我选择它的原因。起初我是在没有Splitter的情况下构建的,它运行得很好。顺便说一下,拉伸因子是1:1。
现在我将两个小部件放在Splitter中(通过打破主要布局,将两个小部件放在Splitter中并将新布局设置到主小部件)。调整大小仍然有效,但拉伸因素表现得很奇怪:
PlainTextEdit似乎占用了很多空间。拉伸因子仍为1:1。我找到了一个workaournd,通过将上部窗口小部件的拉伸更改为更高的值(在本例中为9:1),再次看起来很好:
所以我的问题是:当我将图像放入Splitter时,为什么拉伸因子开始表现得很奇怪?如何在不使用任意猜测的拉伸因子的情况下解决这个问题?
答案 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。