Qt-容器类控件 布局管理器
容器类控件
之前学过的多元素控件,它里面包含的内容是一个一个自定义好的 “Item”对象。
而容器类控件,里面包含的就是之前学过的各种控件了,比如QPushButton,QLineEdit等等。
QGroup Box
核心属性
给许愿井加上分组框
QTabWidget
核心属性:
核心信号:
使⽤标签⻚管理多组控件
槽函数的设计:
演示:
布局管理器
之前我们把控件放到界面上,都是靠手动的方式来布局的。
这种手动布局的方式是不科学的:
1.手动布局的方式复杂,且不精确。
2.无法对窗口进行自动适应调整。
因此 Qt 引⼊ "布局管理器" (Layout) 机制, 来解决上述问题
当然, 布局管理器并⾮ Qt 独有. 其他的 GUI 开发框架, 像 Android, 前端等也有类似的机制
Qt中提供了很多种布局管理器:
1.垂直布局
2.水平布局
3.网络布局
4.表单布局
另外,在Qt种,每个widget中只能有一个布局管理器。
我们通过代码的方式创建layout,就只是创建了一个layout。
但是通过Qt Designer的方式创建layout的话,它其实是先创建了一个widget,然后再在这个新的widget中添加了一个layout。
垂直布局
使⽤ QVBoxLayout 表⽰垂直的布局管理器. V 是 vertical 的缩写
核心属性
Layout 只是⽤于界⾯布局, 并没有提供信号
使⽤ QVBoxLayout 管理多个控件
这些按钮就存在于布局管理器中,并且会随着窗口的大小而自动调整自身大小。
创建两个 QVBoxLayout
我们可以在界面上直接创建两个 QVBoxLayout 。
我们也可以先把控件创建出来,然后用ctrl左键的方式把它们都选中,选中好后点击垂直布局的快捷键
它就会把我们刚刚选中的控件都放到一个垂直布局管理器中了。
⽔平布局
使⽤ QHBoxLayout 表⽰垂直的布局管理器. H 是 horizontal 的缩写
水平布局的核心属性跟垂直布局的是一致的。
使⽤ QHBoxLayout 管理控件
嵌套的 layout
Layout ⾥⾯可以再嵌套上其他的 layout, 从⽽达到更复杂的布局效果.
使⽤ addLayout 给 layout 中添加⼦ layout
演示:
可见下面的水平布局管理器就是子layout。
⽹格布局
Qt 中还提供了 QGridLayout ⽤来实现⽹格布局的效果. 可以达到 M * N 的这种⽹格的效果
使⽤ QGridLayout 管理元素
调整一下代码:
发现这样就变得跟水平布局一样了。
再这样调整:
再调整:
设置 QGridLayout 中元素的⼤⼩⽐例
使⽤ setColumnStretch 设置每⼀列的拉伸系数
拉伸比为0,则表示不参与拉伸,当我们拉动窗口时,尺寸不会随着窗口大小而改变。
设置垂直⽅向的拉伸系数
演示:
表单布局
使⽤ QFormLayout 创建表单
Spacer
使⽤布局管理器的时候, 可能需要在控件之间, 添加⼀段空⽩. 就可以使⽤ QSpacerItem 来表⽰
核心属性
创建⼀组左右排列的按钮
可以看到,两个按钮之间已经存在间隔了。
在 Qt Designer 中, 也可以直接给界⾯上添加 spacer.