QBoxLayout 理论总结
- 1. 简述
- 2. 创建布局器
- 3. 添加布局元素
- 4. 间隔设置
- 5. 布局 操作
1. 简述
QBoxLayout 占用来自其父布局或 parentWidget()获得的空间,将其划分为一排框,并使在布局器里的控件填充一个框。
如果 QBoxLayout 的方向是 Qt::Horizontal ,则框将排成一行,大小合适。每个小部件(或其他框)将至少获得其最小大小,最多获得其最大大小。任何多余的空间都根据stretch factors 拉伸。只要不指定stretch factors,每个控件都是均分布局器的空间的。
如果 QBoxLayout 的方向是 Qt::Vertical,则框将放置在一列中,同样具有合适的大小。
一般直接用的QHBoxLayout或QVBoxLayout来布局的,很少用QBoxLayout 来直接的,但是QHBoxLayout 和 QVBoxLayout是QBoxLayout的子类,所有的功能全有,只是方向不一样,所有只需要知道QBoxLayout的功能就能用QHBoxLayout 和 QVBoxLayout。
使用 QHBoxLayout或QVBoxLayout 都可以参考这下面的内容。
2. 创建布局器
创建QBoxLayout的最简单方法是使用其中一个方便类,例如QHBoxLayout(用于Qt::Horizontal box)或QVBoxLayout(用于Qt::Vertical box)。
也还可以直接使用 QBoxLayout 构造函数,将其方向指定为 “从左到右”、“从右到左”、“从上到下”或“从下到上”。
如果 QBoxLayout 不是顶级布局(即它不管理小部件的所有区域和子布局),则必须先将其添加到其父布局中,然后才能对其进行任何操作。添加布局的正常方法是调用 parentLayout->addLayout()。
3. 添加布局元素
布局的元素应该是QLayoutItem,其实就布局的元素就是 QWidget、QSpaceItem、QLayout 类及其子类哈。
这里有一个stretch factors 缩放因子,其实就是在布局器里面,每个控件或者布局按照什么比例划分布局的空间。
第二个比例因子是2,其他是0,其实也就是 1,也就是说 第二个 布局元素按钮 大小的布局控件是其他的两倍。
添加这些的函数如下
函数名 | 含义 |
---|---|
addWidget() | 添加一个 widget到 布局器里,可以设置 缩放因子的 |
addSpacing() | 添加一个不伸缩的默认长度为0的弹簧 其实就是为了压缩到某一边 |
addStretch() | 添加一个伸缩默认minimum 长度为0的弹簧布局(自适应) |
addLayout() | 添加一个 layout 到 布局器里,可以设置 缩放因子的,其实布局器里还可以布局的嘛 |
addSpacing() 、 addStretch() 其实都是为了布局压缩控件显示到一边,一个是自适应而已,一个指定那个弹簧长度的。
当然哈,这个add 系列的函数都是在QBoxLayout 最后添加的。我们也可以指定插入到布局器的位置
- insertWidget(), insertSpacing(), insertStretch() 和 insertLayout()
4. 间隔设置
QBoxLayout 有两种间隔需要设置:
函数名 | 含义 |
---|---|
setContentsMargins() | 布局元素与布局器的边界,就是下面四周的间隔,默认是 9 |
setSpacing() | 就是布局元素之间的间隔,默认是 6 |
5. 布局 操作
和上面的添加布局器一样
用 removeWidget() 来移除 布局的控件
用 removeItem() 来移除 子布局器包括 QSpaceItem(就是弹簧布局器)
用 takeAt() 来移除指定位置的布局器,并返回这个布局器,其实和 removeItem() 类似
用 replaceWidget() 来替换两个控件的布局位置