Qt 6: 1-5 布局管理
目录
作用
- 定位子部件
- 感知窗口大小(默认和最小)
- 窗口大小变化时自动处理子部件
常用属性
属性 | 设置函数 | 说明 |
---|---|---|
layoutSpacing | setSpacing() | 子部件距离 |
layoutStretch | setStretch() | 伸缩因子 |
layoutLeftMargin | setContentsMargins() | 距左边界距离 |
layoutTopMargin | setContentsMargins() | 距上边界距离 |
layoutRightMargin | setContentsMargins() | 距右边界距离 |
layoutButtomMargin | setContentsMargins() | 距下边界距离 |
setContentsMargins(左, 上, 右, 下)
常用布局管理器
基本布局管理器
基本布局管理器分为水平布局和垂直布局
水平布局管理器
头文件:<QHBoxLayout>
效果:让子部件从左到右排列
使用方法:
-
在设计界面点击上方的Lay Out Horizontally或摁快捷键Ctrl + H
-
使用代码
QHBoxLayout *layout = new QHBoxLayout();
layout->addWidget(ui->fontCombox) //添加组件
layout->setSpacing(50) //部件间隔
layout->setContentsMargins(0, 0, 50, 100) // 离左、上、右、下的距离
setLayout(layout) //设置布局
注:设置布局代码放在setupUi()后
垂直布局管理器
头文件:<QVBoxLayout>
效果:让子部件从上到下排列
使用方法:与水平布局类似
栅格布局管理器
头文件:<QGridLayout>
效果:计算布局空间,将布局合理分为一块块类似经纬切分的小格,因此又称网格布局
使用方法:
- 在设计界面点击上方的Lay Out Horizontally或摁快捷键Ctrl + G
- 使用代码
QGridLayout *layout = new QGridLayout;
layout->addWidget(ui->fontComboBox, 0, 1, 2, 3);
// 参数分别为子部件,第1行2列开始,占据2行3列
// 只有一个部件默认居中
setLayout(layout);
窗体布局管理器
头文件:<QFormLayout>
效果:分成两列,管理表单的输入部件和相关的标签,左边标签,右边输入部件,又叫表单布局
使用方法:
- 在设计界面点击左上方的Layouts中拖动Form Layout
- 使用代码
QLineEdit *le = new QLineEdit();
QFormLayout *layout = new QFormLayout();
layout->addRow("标签(&N)", le);
setLayout(layout);
效果:
实际中是几个布局嵌套使用
部件大小
QSizePolicy
- 作用:保存部件的默认布局行为,有水平和垂直
- 大小策略取值见下表
- 方法
- sizeHint(),获取sizeHint(大小提示),即窗口默认大小
- minimumSizeHint(),获取minimumsizeHint(最小大小提示),即最小窗口
- 伸缩因子,窗口伸缩时组件相对伸缩倍数
QSizePolicy:: | 描述 |
---|---|
Fixed | 只使用sizeHint()提供的值,无法伸缩 |
Minimum | sizeHint()提供的值为最小值,可拉伸 |
Maximum | sizeHint()提供的值为最大值,可压缩 |
Preferred | sizeHint()提供的值为最佳大小,可拉伸 |
Expanding | sizeHint()提供的值为合适大小,可拉伸,倾向拉伸 |
MinimumExpanding | sizeHint()提供的值为最小值,可拉伸,倾向拉伸 |
Ignored | sizeHint()提供的值被忽略,尽可能拉伸获取空间 |
布局管理器属性
layoutFieldGrowthPolicy
- 作用:指定部件大小的变化方式
- 值
- AllNonFixedFieldsGrow:都拉伸(默认)
- FieldsStayAtSizeHint:使用sizeHint()提供的大小
- ExpandingFieldsGrow:大小策略为Expanding的部件被拉伸
layoutRowWrapPolicy
- 作用:是否换行
- 值:
- DontWrapRows:不换行(默认)
- WrapLongRows:较长的换行
- WrapAllRows:都换行,所有输入部件都会放置在相应的标签下面
layoutLabelAlignment
- 作用:对齐方式,有水平和垂直
- 值(水平方向):
- AlignLeft:左对齐
- AlignRight:右对齐
- AlignHCenter:水平居中对齐
- AlignJustify:两端对齐
- 值(垂直方向):
- AlignTop:向上对齐
- AlignBottom:向下对齐
- AlignVCenter:垂直居中对齐
layoutSizeConstraint
- 作用:约束顶级窗口大小
- 常量(类中前缀为QLayout::)
- SetDefaultConstraint:设为minimumSize()的值,除非已有最小大小
- SetFixedSize:设为sizeHint()的值,无法改变大小
- SetMinimumSize:设为minimumSize()的值,无法再缩小
- SetMaximumSize:设为maximumSize()的值,无法再放大
- SetMinAndMaxSize:最小设为minimumSize()的值,最大设为maximumSize()的值
- SetNoConstraint:部件不被约束
拆分器
- 解决组件大小垂直方向不会变换问题
- 分为水平和垂直
伙伴关系
- 将标签与交互组件联系在一起
- 摁下标签里设置的快捷键时触发组件
- 使用方法:设计模式里点击设置伙伴
- 快捷键设置:&开头后跟的第一个字母。如&Button,即“alt + B”,Button(&L),即"alt + L",&不显示
Tab键顺序
- 作用:按tab键焦点移动顺序
- 使用方法:设计模式里点击设置伙伴