Qt布局管理器

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的安装包可以私信我,你们的支持是博主坚持创作的动力!💪💪

相关推荐
zhuqiyua3 小时前
第一次课程家庭作业
c++
3 小时前
java关于内部类
java·开发语言
好好沉淀3 小时前
Java 项目中的 .idea 与 target 文件夹
java·开发语言·intellij-idea
只是懒得想了3 小时前
C++实现密码破解工具:从MD5暴力破解到现代哈希安全实践
c++·算法·安全·哈希算法
lsx2024063 小时前
FastAPI 交互式 API 文档
开发语言
VCR__3 小时前
python第三次作业
开发语言·python
码农水水3 小时前
得物Java面试被问:消息队列的死信队列和重试机制
java·开发语言·jvm·数据结构·机器学习·面试·职场和发展
wkd_0073 小时前
【Qt | QTableWidget】QTableWidget 类的详细解析与代码实践
开发语言·qt·qtablewidget·qt5.12.12·qt表格
东东5164 小时前
高校智能排课系统 (ssm+vue)
java·开发语言
余瑜鱼鱼鱼4 小时前
HashTable, HashMap, ConcurrentHashMap 之间的区别
java·开发语言