是表格布局管理器,继承QLayout
像注册这种界面用的就是表格布局管理器
目录
2.1.1 addRow(self, QWidget, QWidget)
2.1.2 addRow(self, QWidget, QLayout)
2.1.3 addRow(self, str, QWidget)
2.1.4 addRow(self, str, QLayout)
2.3.1 获取控件位置 getWidgetPosition()
2.3.2 获取布局管理器位置 getLayoutPosition()
2.9.1 对整个表单进行设置 setFormAlignment()
2.9.2 对标签(左侧区域)进行设置 setLabelAlignment()
2.9.3 获取整个表单的对齐方式 formAlignment()
2.9.4 获取标签布局标签(左侧)侧的对齐方式 labelAlignment()
2.11.1 设置 setFieldGrowthPolicy()
1 构造函数
我们模拟一个注册界面,首先我们搞两个姓名和年龄的标签,然后搞一个单行编辑器,再搞一个步长调节器
我们使用addWidget都给添加到表单里
它默认是每个控件自己占一行,如果想两个控件搞一行,我们就需要一点别的操作
2 行操作
2.1 添加行 addRow()
2.1.1 addRow(self, QWidget, QWidget)
这种写法只能一行放两个控件进去,如果多放就会报错
2.1.2 addRow(self, QWidget, QLayout)
如果要放多个控件可以用这个方法,是一个控件加上一个布局管理器
2.1.3 addRow(self, str, QWidget)
我们可以对这个标签设置快捷键,设置的快捷键会自动关联后面的控件
我们运行之后是这样的
我们现在按alt+c
2.1.4 addRow(self, str, QLayout)
2.1.5 addRow(self, QWidget)
2.1.6 addRow(self, QLayout)
一般来讲一行控件过多的时候都是用这个
- QFormLayout分左右两个区域,左侧区域叫label区域,右侧区域叫Field区域
2.2 插入行
和前面添加行的使用方法相似,就是在前面加上了一个要插入的位置,不在这里赘述了
如果输入的int大于或小于(-1)现有行数都会默认将插入的行放在最后一行
2.3 获取布局器中控件的行信息
现在咱们这个窗口是这样的
- 方法中获取的第二个值为控件的角色,控件的角色分为三种
- 0 - QFormLayout.LableRole 左侧 虽然写的是标签,但是这个是判断在左侧还是在右侧的
- 1 - QFormLayout.FieldRole 右侧 虽然写的是输入框,但是这个是判断在左侧还是在右侧的
- 2 - QFormLayout.SpanningRole 当这个控件占据了一整行会返回这个值
2.3.1 获取控件位置 getWidgetPosition()
我们现在获取age_label这个控件的位置
控件在第一行 左侧
如果获取的控件不直接在布局管理器下,不会报错,会返回下面这样一个值
2.3.2 获取布局管理器位置 getLayoutPosition()
我们现在获取最下面的布局管理器
该布局管理器在第二行,角色为跨越标签与输入框的控件
2.3.3 获取行的总个数 rowCount()
2.4 设置控件的位置
我们把之前布局管理器添加的行都取消掉
2.4.1 设置布局管理器的位置 setLayout()
现在我想把布局管理器放在第四行,左侧
我们发现还是在第一行,说明设置的时候不能指定放在第几行就放在第几行,前面三行需要有东西它才会放到第四行
2.4.2 修改控件位置 setWidget()
我们现在把name_label放在第三行,右侧
2.5 移除行并删除子控件 removeRow()
2.5.1 removeRow(self,int)
删除前
我们现在删除第0行
2.5.2 removeRow(self,QWidget)
删除前
我们现在删除 姓名这个标签的这一行
2.5.3 removeRow(self,QLayout)
删除前
现在我们删除布局管理器这一行
2.6 移除行但并不删除子控件 takeRow()
这个用法和removeRow()相似,区别是这个方法会有一个返回值,我们搞一个作为例子
删除前
现在我们删除第0行
由于并没有删除控件,所以它拉大之后变成了这样
返回的这个结果咱们可以用两个方法来处理
这两个方法各自会返回一个对象,labelItem是行左侧的QWidgetItem对象,fieldItem是行右侧的QWidgetItem对象
但是这个还不是控件对象,需要在后面使用widget()方法
这次我们就可以看到返回的结果是一个标签,一个单行编辑器了
2.7 标签操作 labelForField()
现在我们的窗口是这样的
我们现在获取单行文本编辑器左侧的标签区域
发现左侧是一个标签
现在获取布局管理器的标签区域
发现左侧没有东西
2.8 行的包装策略
涉及到一个参数QFormLayout.RowWrapPolicy,它的可选值如下
- 0 - QFormLayout.DontWrapRows 字段总放在标签旁边
- 1 - QFormLayout.WrapLongRows 标签最小长度,其余空间给右侧,如果右侧的大小比可用空间宽,则右侧控件换行到下一行
- 2 - QFormLayout.WrapAllRows 字段(右侧)总是位于其标签下方
2.8.1 设置 setRowWrapPolicy()
我们设置前是这样的
现在我们设置一下
其余的我就不测试了,回来用到了看一下就行
2.8.2 获取 rowWrapPolicy()
2.9 对其方式
2.9.1 对整个表单进行设置 setFormAlignment()
设置之前是这样的
设置之后是这样的
2.9.2 对标签(左侧区域)进行设置 setLabelAlignment()
我们这个要改一下标签内容才能看出效果
改之前我的窗口是这样的
现在我们将左侧标签区域设置为右对齐
2.9.3 获取整个表单的对齐方式 formAlignment()
2.9.4 获取标签布局标签(左侧)侧的对齐方式 labelAlignment()
2.10 间距
2.10.1 竖直方向
2.10.1.1 设置 setVerticalSpacing()
没设置前是这样的
现在我们设置竖直间距为20
2.10.1.2 获取 verticalSpacing()
2.10.2 水平方向
2.10.2.1 设置 setHorizontalSpacing()
设置前是这样的
现在我们设置水平间距为20
2.10.2.2 获取 horizontalSpacing()
2.10.3 所有间距
设置前是这样的
现在我们设置所有间距为50
2.10.3.2 获取 spacing()
2.11 字段增长策略
上面两个方法涉及到一个参数 QFormLayout.FieldGrowPolicy
它可以有下面三个值
- 0 - QFormLayout.FieldsStayAtSizeHint
- 1 - QFormLayout.ExpandingFieldsGrow
- 2 - QFormLayout.AllNonFixedFieldsGrow
2.11.1 设置 setFieldGrowthPolicy()
0是默认值就不测试了
- QFormLayout.ExpandingFieldsGrow
可以看到步长调节器变小了
- QFormLayout.AllNonFixedFieldsGrow
没看出来有什么变化
2.11.2 获取 fieldGrowthPolicy()
3 其他有可能用到的方法
了解一下就行,用到再说