关于布局管理器,它是Qt提供的自动安排子部件位置的东西,布局管理可以为我们节省很多对位置的调节工作。
基本的布局管理器有四种:Horizontal, Vertical, Grid, 和Form 布局管理器。这些在前面的例子都能看到是如何使用的。Qt的帮助文档里也有一个专门讲他们的例子:Basic Layouts。 QHBoxLayout, QVBoxLayout, QGridLayout,和QFormLayout 都继承自QLayout。Layouts通过调用addWidget或者addRow将窗口部件加入进去,QWidget及其子类都有一个setLayout的成员函数,可以将我们的布局管理器设置进去,这样就完成了布局。
当widgets被加入到layout,它是如下工作的:
1. 所有的widgets将根据他们的QWidget::sizePolicy()和QWidget::sizeHint()被初始化一定数量的空间。
2. 如果一个widget有stretch factors(值大于0的)要设置,那么就会为他们分配这些空间。
3. 如果其他widgets都不在需要空间了,那么就会把剩余的空间都给那些stretch factors为0的widget。那些设置了QSizePolicy::Expanding的优先分配。
4. 那些设置了最小大小却还没有被分配到他们的最小值的widgets会被分配空间直到他们的最小值。
5. 那些设置了最大大小却分配空间多于了这个最大值的widgets会被分配空间直到他们的最大值。
当我们做自己的窗体部件类时,可能会需要和它的 layout 属性交流,如果这个部件有 Qt 的布局管理器中的一个,它就已经管理好了。如果这个部件没有任何子部件,或者使用的手动布局,你一通过下面的方法改变部件的行为:
1. 重新实现QWidget::sizeHint(),它返回一个设置的窗体大小。
2. 重新实现 QWidget::minimumSizeHin