[Qt][布局管理器]详细讲解

DieSnowK 2024-08-17 16:05:14 阅读 87

目录

0.为什么?1.注意事项2.垂直布局3.水平布局4.网格布局5.表单布局6.Spacer


0.为什么?

之前使⽤Qt在界⾯上创建的控件,都是通过"绝对定位"的⽅式来设定的,每个控件的所在位置,都需要计算坐标,最终通过<code>setGeometry或move摆放过去

这种设定⽅式其实并不⽅便,尤其是界⾯如果内容⽐较多,不好计算并且⼀个窗⼝⼤⼩往往是可以调整的,按照绝对定位的⽅式,也⽆法⾃适应窗⼝⼤⼩ 因此Qt引⼊布局管理器”(Layout)机制,来解决上述问题


1.注意事项

一个Widget只能包含一个layout

但是可以通过先创建一个新的Widget,再在这个新的Widget中添加一个Layout,即可达到"多个Layout"的目的 布局管理器之间,可以进行嵌套


2.垂直布局

QVBoxLayout表⽰垂直的布局管理器

Layout只是⽤于界⾯布局,并没有提供信号 核心属性

layoutLeftMargin:左侧边距layoutRightMargin:右侧边距layoutTopMargin:上方边距layoutBottomMargin:下⽅边距layoutSpacing:相邻元素之间的间距


3.水平布局

QHBoxLayout表⽰水平的布局管理器核⼼属性

layoutLeftMargin:左侧边距layoutRightMargin:右侧边距layoutTopMargin:上方边距layoutBottomMargin:下⽅边距layoutSpacing:相邻元素之间的间距


4.网格布局

QGridLayout⽤来实现⽹格布局的效果,可以达到N*M的这种⽹格的效果核心属性

layoutLeftMargin:左侧边距layoutRightMargin:右侧边距layoutTopMargin:上方边距layoutBottomMargin:下⽅边距layoutHorizontalSpacing:相邻元素之间水平方向的间距layoutVerticalSpacing:相邻元素之间垂直⽅向的间距layoutRowStretch:⾏⽅向的拉伸系数

直接设置不明显,因为每个按钮的高度是固定的,需要把按钮的sizePolicy设置为QSizePolicy::Expanding,尽可能填充满布局管理器,才能看到效果setSizePolicy()可设置的尺寸策略:

QSizePolicy::Ignored:忽略控件的尺⼨,不对布局产⽣影响QSizePolicy::Minimum:控件的最⼩尺⼨为固定值,布局时不会超过该值QSizePolicy::Maximum:控件的最⼤尺⼨为固定值,布局时不会⼩于该值QSizePolicy::Preferred:控件的理想尺⼨为固定值,布局时会尽量接近该值QSizePolicy::Expanding:控件的尺⼨可以根据空间调整,尽可能占据更多空间QSizePolicy::Shrinking:控件的尺⼨可以根据空间调整,尽可能缩⼩以适应空间 layoutColumnStretch:列⽅向的拉伸系数

最终按照每个控件对应比例来显示设置为0表示不参与拉伸,为固定值 注意:添加控件时,设置⾏和列的时候,如果设置的是⼀个很⼤的值,但是这个值和上⼀个值之间并没有其他的元素,那么并不会在中间腾出额外的空间总结QGridLayout能够代替很多QHBoxLayoutQVBoxLayout的场景,毕竟嵌套的代码写起来时比较麻烦的

QGridLayout里面也能嵌套QHBoxLayoutQVBoxLayoutQHBoxLayoutQVBoxLayout里面也能嵌套QGridLayout


5.表单布局

QFormLayout属于是QGridLayout的特殊情况,专门用于实现两列表单的布局

这种表单布局多⽤于让⽤⼾填写信息的场景,左侧列为提⽰,右侧列为输⼊框


6.Spacer

使⽤布局管理器的时候,可能需要在控件之间添加⼀段空⽩,就可以使⽤QSpacerItem来表⽰核心属性

width:宽度height:高度hData:⽔平⽅向的sizePolicy

QSizePolicy::Ignored:忽略控件的尺⼨,不对布局产⽣影响QSizePolicy::Minimum:控件的最⼩尺⼨为固定值,布局时不会超过该值QSizePolicy::Maximum:控件的最⼤尺⼨为固定值,布局时不会⼩于该值QSizePolicy::Preferred:控件的理想尺⼨为固定值,布局时会尽量接近该值QSizePolicy::Expanding:控件的尺⼨可以根据空间调整,尽可能占据更多空间QSizePolicy::Shrinking:控件的尺⼨可以根据空间调整,尽可能缩⼩以适应空间 vData:垂直方向的sizePolicy

选项同上



声明

本文内容仅代表作者观点,或转载于其他网站,本站不以此文作为商业用途
如有涉及侵权,请联系本站进行删除
转载本站原创文章,请注明来源及作者。