目录
0.为什么?
- 之前使⽤Qt在界⾯上创建的控件,都是通过"绝对定位"的⽅式来设定的,每个控件的所在位置,都需要计算坐标,最终通过
setGeometry
或move
摆放过去- 这种设定⽅式其实并不⽅便,尤其是界⾯如果内容⽐较多,不好计算
- 并且⼀个窗⼝⼤⼩往往是可以调整的,按照绝对定位的⽅式,也⽆法⾃适应窗⼝⼤⼩
- 因此Qt引⼊**"布局管理器"(Layout)**机制,来解决上述问题
1.注意事项
- 一个
Widget
只能包含一个layout
- 但是可以通过先创建一个新的
Widget
,再在这个新的Widget
中添加一个Layout
,即可达到"多个Layout"的目的
- 但是可以通过先创建一个新的
- 布局管理器之间,可以进行嵌套
2.垂直布局
QVBoxLayout
表⽰垂直的布局管理器Layout
只是⽤于界⾯布局,并没有提供信号
- 核心属性 :
layoutLeftMargin
:左侧边距layoutRightMargin
:右侧边距layoutTopMargin
:上方边距layoutBottomMargin
:下⽅边距layoutSpacing
:相邻元素之间的间距
3.水平布局
QHBoxLayout
表⽰水平的布局管理器- 核⼼属性 :
layoutLeftMargin
:左侧边距layoutRightMargin
:右侧边距layoutTopMargin
:上方边距layoutBottomMargin
:下⽅边距layoutSpacing
:相邻元素之间的间距
4.网格布局
QGridLayout
⽤来实现**⽹格布局**的效果,可以达到N*M
的这种⽹格的效果- 核心属性 :
layoutLeftMargin
:左侧边距layoutRightMargin
:右侧边距layoutTopMargin
:上方边距layoutBottomMargin
:下⽅边距layoutHorizontalSpacing
:相邻元素之间水平方向的间距layoutVerticalSpacing
:相邻元素之间垂直⽅向的间距layoutRowStretch
:⾏⽅向的拉伸系数- 直接设置不明显,因为每个按钮的高度是固定的,需要把按钮的
sizePolicy
设置为QSizePolicy::Expanding
,尽可能填充满布局管理器,才能看到效果 setSizePolicy()
可设置的尺寸策略:QSizePolicy::Ignored
:忽略控件的尺⼨,不对布局产⽣影响QSizePolicy::Minimum
:控件的最⼩尺⼨为固定值,布局时不会超过该值QSizePolicy::Maximum
:控件的最⼤尺⼨为固定值,布局时不会⼩于该值QSizePolicy::Preferred
:控件的理想尺⼨为固定值,布局时会尽量接近该值QSizePolicy::Expanding
:控件的尺⼨可以根据空间调整,尽可能占据更多空间QSizePolicy::Shrinking
:控件的尺⼨可以根据空间调整,尽可能缩⼩以适应空间
- 直接设置不明显,因为每个按钮的高度是固定的,需要把按钮的
layoutColumnStretch
:列⽅向的拉伸系数- 最终按照每个控件对应比例来显示
- 设置为
0
表示不参与拉伸,为固定值
- 注意:添加控件时,设置⾏和列的时候,如果设置的是⼀个很⼤的值,但是这个值和上⼀个值之间并没有其他的元素,那么并不会在中间腾出额外的空间
- 总结 :
QGridLayout
能够代替很多QHBoxLayout
和QVBoxLayout
的场景,毕竟嵌套的代码写起来时比较麻烦的QGridLayout
里面也能嵌套QHBoxLayout
和QVBoxLayout
QHBoxLayout
和QVBoxLayout
里面也能嵌套QGridLayout
5.表单布局
QFormLayout
属于是QGridLayout
的特殊情况,专门用于实现两列表单的布局- 这种表单布局多⽤于让⽤⼾填写信息的场景,左侧列为提⽰,右侧列为输⼊框
6.Spacer
- 使⽤布局管理器的时候,可能需要在控件之间添加⼀段空⽩,就可以使⽤
QSpacerItem
来表⽰ - 核心属性 :
width
:宽度height
:高度hData
:⽔平⽅向的sizePolicy
QSizePolicy::Ignored
:忽略控件的尺⼨,不对布局产⽣影响QSizePolicy::Minimum
:控件的最⼩尺⼨为固定值,布局时不会超过该值QSizePolicy::Maximum
:控件的最⼤尺⼨为固定值,布局时不会⼩于该值QSizePolicy::Preferred
:控件的理想尺⼨为固定值,布局时会尽量接近该值QSizePolicy::Expanding
:控件的尺⼨可以根据空间调整,尽可能占据更多空间QSizePolicy::Shrinking
:控件的尺⼨可以根据空间调整,尽可能缩⼩以适应空间
vData
:垂直方向的sizePolicy
- 选项同上