文章目录
Qt
布局管理器
之前在使用 Qt 创建界面上的控件时,大多是通过 "绝对定位" 的方式来设定的。即每个控件所在的位置都需要计算坐标,最终通过 setGeometry 或者 move 方式进行摆放。
然而,这种设定方式实际上并不方便。尤其是当界面内容较多时,不好计算控件的位置。而且一个窗口的大小往往是可以调整的,按照绝对定位的方式,无法自适应窗口大小。
因此,Qt 引入了 "布局管理器"(Layout)机制,以解决上述问题。
垂直布局
使用 QVBoxLayout 表示垂直的布局管理器。其中,V 是 vertical 的缩写。
属性 | 说明 |
---|---|
layoutLeftMargin | 左侧边距 |
layoutRightMargin | 右侧边距 |
layoutTopMargin | 上方边距 |
layoutBottomMargin | 下方边距 |
layoutSpacing | 相邻元素之间的间距 |
- QVBoxLayout 是垂直布局,addWidget() 用于向布局器中添加元素。
水平布局
使用 QHBoxLayout 表示水平的布局管理器。其中,H 是 horizontal 的缩写。
核心属性与 QVBoxLayout 属性一致,具体如下:
属性 | 说明 |
---|---|
layoutLeftMargin | 左侧边距 |
layoutRightMargin | 右侧边距 |
layoutTopMargin | 上方边距 |
layoutBottomMargin | 下方边距 |
layoutSpacing | 相邻元素之间的间距 |
- QHBoxLayout 是水平布局管理器,addWidget用于添加元素。
- QVBoxLayout 和 QHBoxLayout 可以配合使用。
网格布局
Qt 中提供了 QGridLayout 用于实现网格布局的效果,能够达到 M * N 的网格布局形式。
核心属性与 QVBoxLayout 和 QHBoxLayout 有相似之处,但在设置间距时是按照垂直和水平两个方向进行设置的。
属性 | 说明 |
---|---|
layoutLeftMargin | 左侧边距 |
layoutRightMargin | 右侧边距 |
layoutTopMargin | 上方边距 |
layoutBottomMargin | 下方边距 |
layoutHorizontalSpacing | 相邻元素之间水平方向的间距 |
layoutVerticalSpacing | 相邻元素之间垂直方向的间距 |
layoutRowStretch | 行方向的拉伸系数 |
layoutColumnStretch | 列方向的拉伸系数 |
- 网格布局管理器,类似网格可以调整元素的位置。
- 使用QSizePolicy 提供的一些宏可以修改按钮的样式。
表单布局
除了上述的布局管理器之外,Qt 还提供了 QFormLayout。它属于 QGridLayout 的特殊情况,专门用于实现两列表单的布局。
这种表单布局多用于让用户填写信息的场景。其中,左侧列为提示信息,右侧列为输入框,方便用户直观地了解每个输入项的含义并进行相应的输入操作。
- QGridLayout 为表单布局。
Spacer
在使用布局管理器的时候,可能需要在控件之间添加一段空白,此时可以使用 QSpacerItem 来表示。
属性 | 说明 |
---|---|
width | 宽度 |
height | 高度 |
hData | 水平方向的 sizePolicy |
QSizePolicy::Ignored | 忽略控件的尺寸,不对布局产生影响。 |
QSizePolicy::Minimum | 控件的最小尺寸为固定值,布局时不会超过该值。 |
QSizePolicy::Maximum | 控件的最大尺寸为固定值,布局时不会小于该值。 |
QSizePolicy::Preferred | 控件的理想尺寸为固定值,布局时会尽量接近该值。 |
QSizePolicy::Expanding | 控件的尺寸可以根据空间调整,尽可能占据更多空间。 |
QSizePolicy::Shrinking | 控件的尺寸可以根据空间调整,尽可能缩小以适应空间。 |
vData | 垂直方向的 sizePolicy,选项同水平方向。 |
- Spacer 向布局管理器中添加空白。