2017-05-07 88 views
2

我在调整宽度QSplitter时遇到问题。我在Qt Designer中编写UI,现在看起来像这样:如何平均分配QSplitter的宽度

设计视图

enter image description here

这里是我的对象检查

enter image description here

我问题是如何将QSplitter的宽度等分为左边和右边右侧区域。我希望将这种效果作为初始尺寸,然后客户可以做他想做的任何事情。

的影响,我想有如下:

enter image description here

在其他的世界,我在寻找一种方式来指定左和右区域的分流初始分割为50% /窗口宽度的50%。有没有任何选择来获得?

感谢您的帮助,请原谅,我刚开始学习Qt。

回答

5

简短的回答

splitter->setSizes(QList<int>({INT_MAX, INT_MAX})); 

说明

你不会在这种情况下,需要一个QSpacer。分隔符的目标是填充所有可用空间。

QSplitter提供了两种方法来指定其子项的大小:setStretchFactorsetSizes

  • 虽然拉伸因子看起来可能是你在找什么来指定子控件的相对大小,但其缺点为你的情况的因素是相对于子控件的初始大小:

弹力不是有效的弹力系数;有效弹性系数 系数是通过取小部件的初始大小和 乘以弹性来计算的。

因此,将两个孩子的拉伸因子设置为相同的值(例如,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})); 

延伸阅读

大多数时候,Qt做得很好,给所有小部件一个合适的大小,但是调整它可能会变得非常困难,需要一些试验和错误。因此,我想提供的Qt与布局管理工作时,这可能是有用的一些额外的资源: