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

目录


0.为什么?

  • 之前使⽤Qt在界⾯上创建的控件,都是通过"绝对定位"的⽅式来设定的,每个控件的所在位置,都需要计算坐标,最终通过setGeometrymove摆放过去
    • 这种设定⽅式其实并不⽅便,尤其是界⾯如果内容⽐较多,不好计算
    • 并且⼀个窗⼝⼤⼩往往是可以调整的,按照绝对定位的⽅式,也⽆法⾃适应窗⼝⼤⼩
  • 因此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里面也能嵌套QHBoxLayoutQVBoxLayout
    • QHBoxLayoutQVBoxLayout里面也能嵌套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
      • 选项同上
相关推荐
墨染千千秋2 小时前
C++函数的使用以及主函数
c++
特种加菲猫3 小时前
继承,一场跨越时空的对话
开发语言·c++
WBluuue3 小时前
Codeforces 1093 Div2(ABCD1D2)
c++·算法
玩转单片机与嵌入式4 小时前
玩转边缘AI(TInyML):需要掌握的C++知识汇总!
开发语言·c++·人工智能
历程里程碑4 小时前
4 Git远程协作:从零开始,玩转仓库关联与代码同步(带实操代码讲解)
大数据·c++·git·elasticsearch·搜索引擎·gitee·github
茉莉玫瑰花茶5 小时前
Qt 信号与槽 [ 1 ]
开发语言·数据库·qt
汉克老师5 小时前
GESP5级C++考试语法知识(贪心算法(一)课堂例题精讲)
c++·贪心算法·gesp5级·gesp五级·贪心规律
墨染千千秋5 小时前
C++头文件的使用,和各个头文件与头文件用处
c++
呱呱巨基5 小时前
Linux 基础IO
linux·c++·笔记·学习
旖-旎5 小时前
深搜练习(N皇后)(10)
c++·算法·深度优先·力扣