【Qt】容器控件、布局管理控件
目录
容器控件
QGroupBox
QTabWidget
布局管理控件
QVBoxLayout
例子:
QHBoxLayout
例子:
QGridLayout
例子:
例子:
QFormLayout
例子:
QSpacerItem
例子:
容器控件
QGroupBox
表示一个带有标题的分组框。可以把其他的控件放到一个分组框里,用来美化界面。
核心属性:
title:分组框的标题。
alignment:分组框内部内容的对齐方式。
flat:边框是否是扁平模式。
checkable:是否可选择。如果设为true在分组框title处会出现一个可勾选框。
checked:是否被选中,checkable为true是前提。
例子:
当设置分组框的checkable为true,就会有一个可勾选框,若不勾选该对勾则该分组框中的控件都不可用。
注意:当将复制的分组框粘贴到父控件QWidget中时,要选中父控件QWidget窗口再粘贴(意思就是将复制的分组框粘贴到父控件QWidget中),否则会将复制的分组框粘贴到原来的分组框中。
QTabWidget
表示一个可以有多个标签页(可以相互切换),每个标签页中可以有多个控件。
核心属性:
tabPosition:标签的位置。
North:上方。South:下方。West:左侧。East:右侧。
currentIndex:当前选中的标签页的下标。(下标从0计算)
currentTabText:当前选中标签页的的文本。
currentTableName:当前选中标签页的名字。
currentTableIcon:当前选中标签页的图标。
tabsClosable:标签页是否可以被关闭。
moveable:标签页是否可以被移动。
核心信号:
例子:
点击按钮增加标签页,并且当前选中的标签页为新增的标签页;删除选中的标签页。
布局管理控件
之前我们在窗口上创建的控件都是固定在窗口界面上的,窗口界面的尺寸可以通过拖拽的方式变化,这些创建的控件不能自适应窗口界面的变化,当界面上有很多控件时就不好我们进行自己计算这些控件在界面上的位置,因此就有了布局管理控件。每个布局管理控件中可以有多个控件。
注意:
1.通过代码创建布局控件。(只能创建一个布局管理控件,且布局管理控件中的控件尺寸可以自适应界面的尺寸变化)
2.通过Qt Designer创建布局管理控件。(可以创建多个布局管理控件,但是布局管理控件中的控件不能自适应界面的尺寸变化)
qt提供了如下几种布局管理策略:
垂直布局、水平布局、网格布局、表单布局
QVBoxLayout
垂直布局管理控件
核心属性:
layoutLeftMargin:左侧边距(相对于布局管理控件的边距)
layoutRightMargin:右侧边距。
layoutTopMargin:上方边距。
layoutBottomMargin:下方边距。
layoutSpacing:垂直布局中控件之间的边距。
例子:
使用代码方式创建布局管理控件和使用Qt Designer创建,分析这两种方法的区别。
使用代码方式创建:
这种方法只能创建一个布局管理控件,且布局管理控件中的控件可以自适应界面的尺寸变化。
使用Qt Designer创建:
对应的widget.ui文件中的xml内容:
注意:
从widget.ui文件中我们可以看到使用Qt Designer创建布局管理控件时会创建一个QWidget然后这个QWidget中嵌套了布局管理控件,实际上一个QWidget中只能有一个布局管理控件,如果要创建多个布局管理控件时就必须有多个QWidget。
QHBoxLayout
水平布局管理控件
核心属性:
和上面的QVBoxLayout属性一样。
例子:
在一个水平布局控件中嵌套垂直布局。
QGridLayout
网格布局控件。可以实现n*m网格的效果。
grid:网格。
核心属性:
上,下,左,右四个方向的边距属性和QVBoxLayout,QHBoxLayout一样,不同的属性说元素间的距离。
layoutHorizontalSpacing:水平方向元素间的距离。
layoutVerticalSpacing:垂直方向元素间的距离。
layoutRowStretch:行方向拉伸系数。
layoutColumnStretch:列方向拉伸系数。
例子:
注意:即使将按钮3的位置设置为第90行第90列,按钮三仍然再按钮2后。在addWidget中设置的行数和列数其实是为了决定布局控件中控件之间的相对位置。
例子:
布局控件中控件的拉伸,必须是以整行或整列拉伸。
1.布局控件中的控件宽度拉伸,对整列控件拉伸。
column:表示要拉伸那一列的控件。
stretch:表示拉伸值。当窗口界面尺寸发生改变时,不同列控件的宽度比例就会依据设置的列的拉伸系数调整,当某列的拉伸系数为0,不管窗口界面尺寸如何变化该列的控件的宽度保持不变。
2.布局控件中的控件高度拉伸,对整行控件拉伸。
注意:由于按钮控件的高度默认是不能拉伸的(宽度默认是可以拉伸的),直接通过setRowStretch方法设置拉伸系数是无法拉伸某行按钮控件的高度,必须要将按钮控件的尺寸策略设置为QSizePolicy::Expanding
该方法的参数类型是枚举类型QSizePolicy::Policy
QSizePolicy::Expanding:控件的尺寸可以根据空间调整,尽可能的占据更多空间。
QFormLayout
表单布局控件。专门用于设计两列表单的布局,这种表单布局多用于用户填写信息的场景,左侧列为提示(标签控件),右侧列为输入框。
例子:
向表单控件中添加行的方法:
QSpacerItem
在使用布局管理控件的时候可能需要在控件之间添加空白隔开控件,此时就需要QSpacerItem
例子:
在QHBoxLayout中添加一个QSpacerItem隔开两个按钮控件。