Qt布局管理器
🌟🌟hello,各位读者大大们你们好呀🌟🌟
🚀🚀系列专栏:【Qt的学习】
📝📝本篇内容:QVBoxLayout;QHBoxLayout;QGridLayout;QFormLayout;QSpacerItem
⬆⬆⬆⬆上一篇:Qt容器类控件之QGroupBox与QTabWidget
💖💖作者简介:轩情吖,请多多指教(>> •̀֊•́ ) ̖́-
1.QVBoxLayout
这个布局管理器的是一个垂直布局管理器,V是Vertical的缩写,使用比较简单。
通过四个按钮将其设置进垂直布局管理器中,当窗口进行拖拽时,按钮也会随着自动调整。
每一个Widget只能设置一个布局管理器,但是在Qt Designer中就会有一点不一样的地方,在图形化中我们先拖拽一个布局管理器,在拖拽四个按钮进去,虽然按钮在布局管理器中确实是有效的,但是并不会产生我们想要的效果,在拖拽窗口的时候,并不会调整。这是因为在Qt Designer中创建的Layout,是先创建一个Widget,然后在这个Widget中添加一个layout,我们可以通过代码看一下
verticalLayout是布局管理器的本体,在它外面自动创建了一个verticalLayoutWidget,每个VerticalLayout里面又可以包含若干个控件
还有一种方法在Qt Deisigner中使用布局管理器,选中想要设置的控件,再按下上面的按键来给控件套上一层布局管理器
2.QHBoxLayout
这个和前面的QVBoxLayout是一样的道理,只不过这边是水平
前面讲的两个布局管理器还可以嵌套在一起使用
3.QGridLayout
接下来要讲的这个可以⽤来实现⽹格布局的效果. 可以达到 M * N 的这种⽹格的效果。整体QVBoxLayout 以及 QHBoxLayout 相似. 但是设置 spacing 的时候是按照垂直水平两个方向来设置的。
先展示一下QVBoxLayout一样效果的写法
接下来是QHBoxLayout一样效果的写法
QGridLayout的坐标参数是用来设置相对位置的
QGridLayout还可以设置相关的拉伸系数,来使得控件的大小不一样,还是不同比例展现出来
行------垂直拉伸;列------水平拉伸;
| 函数声明 | 函数说明 |
|---|---|
| void QGridLayout::setColumnStretch(int column, int stretch) | column:目标列的索引。stretch:拉伸因子(非负整数)。值为 0 表示该列不拉伸,大于 0 时按比例分配空间。 |
| void QGridLayout::setRowStretch(int row, int stretch) | column:目标行的索引。stretch:拉伸因子(非负整数)。值为 0 表示该行不拉伸,大于 0 时按比例分配空间。 |
我们的列确实没问题,能够正常的进行拉伸,但是当我们使用行时却会出现问题,如下图
它却不会有任何的变化,是无效的,其实这主要是因为QWidget的属性SizePolicy起到影响,因此导致我们的按钮垂直方向默认没有拉伸开,水平方向默认是拉伸开的,我们要进行设置使得垂直方向能够受到拉伸系数的影响,因此我们需要先让按钮拉伸展开
| 枚举值 | 核心含义(布局行为) |
|---|---|
| QSizePolicy::Ignored | 忽略控件自身的尺寸要求,控件尺寸完全由布局决定,自身尺寸不对布局产生任何约束 |
| QSizePolicy::Minimum | 控件有固定的最小尺寸,布局时控件尺寸不会小于该最小值(可大于,优先使用最小尺寸) |
| QSizePolicy::Maximum | 控件有固定的最大尺寸,布局时控件尺寸不会大于该最大值(可小于,优先使用最大尺寸) |
| QSizePolicy::Preferred | 控件有理想的默认尺寸,布局时会尽量贴近该尺寸;空间充足时可放大,空间不足时可缩小 |
| QSizePolicy::Expanding | 控件尺寸可自适应调整,会主动争取更多可用空间,尽可能占满布局分配的所有空间(最常用) |
| QSizePolicy::Shrinking | 控件尺寸可自适应调整,会主动缩小以适配空间;仅在空间充足时,才会使用自身理想尺寸 |
可以看到我们将按钮的调整策略设置为了Expanding后它就能够在水平方向和垂直方向都进行拉伸了,此时我们再次使用setRowStretch来设置我们的行进行垂直方向的拉伸比例
4.QFormLayout
QFormLayout是表单布局,它是一个表格,它的格式是N行2列,类似于填写信息表格一样
这种表单布局多⽤于让⽤⼾填写信息的场景. 左侧列为提⽰, 右侧列为输⼊框
如果把第⼀个参数填写为 NULL, 则什么都不显示
上面讲的这些所有的布局管理器他们在调用setLayout的时候都相等于将自己挂到了以QWidget为父对象的对象树上,其余的控件像按钮文本也是一样的道理,他们都添加进了布局管理器中,那么他们就相等于已经挂到了同一个对象树上,以布局管理器为父对象
5.QSpacerItem
使⽤布局管理器的时候,可能需要在控件之间,添加⼀段空白, 就可以使⽤ QSpacerItem 来表示
可以看到我们这边的两个按钮之间的空白比较小,我们想要对他进行调整
此时我们变化一下空白的添加顺序
因此我们一定要注意添加空白的顺序,它是按照顺序来进行设置的
🌸🌸Qt布局管理器大概就讲到这里啦,博主后续会继续更新更多Qt的相关知识,干货满满,如果觉得博主写的还不错的话,希望各位小伙伴不要吝啬手中的三连哦!如有小伙伴需要Qt的安装包可以私信我,你们的支持是博主坚持创作的动力!💪💪
















