简答
splitter->setSizes(QList<int>({INT_MAX, INT_MAX}));
注意:如果您需要其他比率,微调部分可能包含基本信息。
说明
QSpacer?没有。
在这种情况下,您不需要QSpacer。间隔器的目标是填充所有可用空间。
QSplitter 提供了两种方法来指定其子项的大小:
虽然 拉伸因子 似乎是您正在寻找的用于指定子小部件的相对大小的东西,但对于您的情况而言,它的缺点是这些因子相对于子小部件:
stretch 不是有效的拉伸因子;有效伸展
因子是通过获取小部件的初始大小来计算的,并且
将它与 stretch 相乘。
因此,将两个孩子的拉伸因子设置为相同的值(例如1)将无法正常工作:
splitter->setStretchFactor(0, 1);
splitter->setStretchFactor(1, 1);
更好的选择是使用 setSizes,因为只有相对大小很重要:
拆分器小部件的整体大小不受影响。相反,任何
额外/缺失的空间根据小部件分布在
相对于尺寸的权重。
因此,人们可能会认为将两个尺寸都设置为一个会将总尺寸平均分配给两个孩子:
splitter->setSizes(QList<int>({1, 1}));
不,因为您应该考虑到将通过用最小尺寸替换太小的值来强制执行最小尺寸政策:
小部件的尺寸策略被保留。也就是说,一个值
小于相应小部件的最小尺寸提示将是
替换为提示的值。
因此,您应该使用大于您孩子的最小尺寸的值,例如可以用int 表示的最大数字,即INT_MAX:
splitter->setSizes(QList<int>({INT_MAX, INT_MAX}));
微调
正如 cmets 中所建议的,INT_MAX 可能会导致一些溢出问题,具体取决于 Qt 对这些值所做的计算。因此,屏幕宽度/高度可能是一个更明智的大值。
// Horizontal splitter
int largeWidth = QGuiApplication::primaryScreen ()->size ().width ();
splitter->setSizes(QList<int>({largeWidth , largeWidth}));
// Vertical splitter
int largeHeight = QGuiApplication::primaryScreen ()->size ().height ();
splitter->setSizes(QList<int>({largeHeight , largeHeight}));
进一步阅读
大多数时候,Qt 可以很好地为所有小部件提供适当的大小,但调整它可能会变得非常困难,需要一些反复试验。因此,我想提供一些额外的资源,这些资源在 Qt 中使用布局管理时可能很有用: