【Qt】:常用控件(十:布局管理器)

之前使用Qt在界面上创建的控件,都是通过"绝对定位"的方式来设定的.也就是每个控件所在的位置,都需要计算坐标,最终通过setGeometry或者move方式摆放过去.这种设定方式其实并不方便.尤其是界面如果内容比较多,不好计算.而且一个窗口大小往往是可以调整的,按照绝对定位的方式,也无法自适应窗口大小.因此Qt 引入"布局管理器"(Layout)机制,来解决上述问题.当然,布局管理器并非Qt独有.其他的GUI开发框架,像Android,前端等也有类似的机制.

一.垂直布局

使用QVBoxLayout表示垂直的布局管理器.V是vertical的缩写.

核心属性:

在这里插入图片描述

Layout只是⽤于界⾯布局,并没有提供信号。

代码⽰例:使⽤ QVBoxLayout 管理多个控件

在这里插入图片描述

在这里插入图片描述

代码⽰例:创建两个 QVBoxLayout

在界面上创建两个QVBoxLayout,每个QVBoxLayout各放三个按钮.

在这里插入图片描述

在这里插入图片描述

运⾏程序,可以看到这些按钮已经⾃动排列好.只不过当前这些按钮的位置不能随着窗⼝⼤⼩⾃动变化.

在这里插入图片描述

通过Qt Designer创建的布局管理器,其实是先创建了一个widget,设置过geometry属性的.再把这个layout设置到这个widget中。实际上,一个widget只能包含一个layout.打开ui文件的原始xml,可以看到其中的端倪…这种情况下layout并非是窗口widget的布局管理器,因此不会随着窗口大小改变。

二.水平布局

使用QHBoxLayout表示垂直的布局管理器.H是horizontal的缩写.

核⼼属性:

在这里插入图片描述

代码⽰例:嵌套的layout

在这里插入图片描述

在这里插入图片描述

三.网格布局

Qt中还提供了QGridLayout用来实现网格布局的效果.可以达到M*N的这种网格的效果.

核⼼属性:

在这里插入图片描述

代码⽰例:使⽤ QGridLayout 管理元素

在这里插入图片描述

在这里插入图片描述

此处也要注意,设置⾏和列的时候,如果设置的是⼀个很⼤的值,但是这个值和上⼀个值之间并没有其他的元素,那么并不会在中间腾出额外的空间.

代码⽰例:设置 QGridLayout 中元素的⼤⼩⽐例

在这里插入图片描述

在这里插入图片描述

另外,QGridLayout也提供了setRowStretch设置行之间的拉伸系数上述案例中,直接设置setRowStretch效果不明显,因为每个按钮的高度是固定的.需要把按钮的垂直方向的sizePolicy属性设置为QSizePolicy: : Expanding尽可能填充满布局管理器,才能看到效果.

如果拉伸系数设为0,表示该控件不参与拉伸。

代码⽰例:设置垂直⽅向的拉伸系数

如果直接设置是不会起作用的,因为受到了QWidget里的属性sizepolicy的影响,它默认垂直方向的没有拉伸,因此垂直方向不会受到拉伸系数的影响。

  1. QsizePolicy : : Ignored:忽略控件的尺寸,不对布局产生影响。
  2. QSizePolicy : : Minimum:控件的最小尺寸为固定值,布局时不会超过该值。
  3. QSizePolicy : :Maximum:控件的最大尺寸为固定值,布局时不会小于该值。
  4. QSizePolicy : : Preferred:控件的理想尺寸为固定值,布局时会尽量接近该值。
  5. QSizePolicy :: Expanding:控件的尺寸可以根据空间调整,尽可能占据更多空间。
  6. QSizePolicy: :Shrinking:控件的尺寸可以根据空间调整,尽可能缩小以适应空间。

在这里插入图片描述

在这里插入图片描述

四.表单布局

除了上述的布局管理器之外,Qt还提供了QFormLayout ,属于是QGridLayout的特殊情况,专门用于实现两列表单的布局.这种表单布局多用于让用户填写信息的场景.左侧列为提示,右侧列为输入框.

代码⽰例:使⽤ QFormLayout 创建表单

使用addRow方法来添加一行.每行包含两个控件.第一个控件固定是QLabel /文本,第二个控件则可以是任意控件.如果把第一个参数填写为NULL,则什么都不显示.

在这里插入图片描述

在这里插入图片描述

五.Spacer

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

在这里插入图片描述

代码⽰例:创建⼀组左右排列的按钮

在这里插入图片描述

在这里插入图片描述

如果想把空白放在左边,就在最上面创建;如果想在右边,就在最下面创建。

相关推荐

  1. qt有哪些

    2024-04-09 17:40:06       35 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-04-09 17:40:06       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-04-09 17:40:06       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-04-09 17:40:06       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-04-09 17:40:06       20 阅读

热门阅读

  1. DockerFile定制镜像

    2024-04-09 17:40:06       14 阅读
  2. Vue3 · 小白学习全局 API:常规

    2024-04-09 17:40:06       17 阅读
  3. 面试前必看,仅供参考

    2024-04-09 17:40:06       14 阅读
  4. 蓝桥杯算法题:蓝桥公园

    2024-04-09 17:40:06       15 阅读
  5. 图神经网络学习记录——图信号处理常见方法

    2024-04-09 17:40:06       12 阅读
  6. python pytest 面试题

    2024-04-09 17:40:06       16 阅读
  7. spring获取bean

    2024-04-09 17:40:06       12 阅读
  8. # 计算机视觉入门

    2024-04-09 17:40:06       15 阅读
  9. 算法刷题记录 Day41

    2024-04-09 17:40:06       12 阅读
  10. 外观模式(面子模式)

    2024-04-09 17:40:06       12 阅读
  11. uni-app中的地图简单说明 map

    2024-04-09 17:40:06       14 阅读