当前位置: 首页 > news >正文

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

目录

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


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
      • 选项同上

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 【Docker】Elasticsearch 8.12 安装与搭建
  • Python大数据分析——Kmeans聚类分析
  • 智驭灌区,科技领航—— 高效灌区信息化系统管理平台
  • 【面试常问之网络】网络故障排查方面
  • AtCoder Regular Contest 180 C. Subsequence and Prefix Sum (dp好题 辅助数组)
  • Go语言实现依赖注入
  • Git代码管理规范
  • 负载均衡详细概念介绍之(四层和七层实现)
  • 微信小程序怎样实现前后台交互?
  • Git命令从入门到精通
  • 在Debian 8上安装Git的方法
  • Apache HTTPD 换行漏洞(CVE-2017-15715)
  • Qt题目知多少-3
  • Redis的Bitmaps结构常用命令总结
  • vue框架的安全设计
  • 〔开发系列〕一次关于小程序开发的深度总结
  • ES2017异步函数现已正式可用
  • Java IO学习笔记一
  • JS正则表达式精简教程(JavaScript RegExp 对象)
  • Mocha测试初探
  • Nodejs和JavaWeb协助开发
  • python 装饰器(一)
  • Redis的resp协议
  • SQLServer之创建数据库快照
  • vue-cli在webpack的配置文件探究
  • Webpack 4x 之路 ( 四 )
  • 基于Volley网络库实现加载多种网络图片(包括GIF动态图片、圆形图片、普通图片)...
  • 京东美团研发面经
  • 如何利用MongoDB打造TOP榜小程序
  • 使用parted解决大于2T的磁盘分区
  • 首页查询功能的一次实现过程
  • 一个完整Java Web项目背后的密码
  • 找一份好的前端工作,起点很重要
  • Salesforce和SAP Netweaver里数据库表的元数据设计
  • Spark2.4.0源码分析之WorldCount 默认shuffling并行度为200(九) ...
  • 阿里云IoT边缘计算助力企业零改造实现远程运维 ...
  • #pragma 指令
  • (04)odoo视图操作
  • (2.2w字)前端单元测试之Jest详解篇
  • (delphi11最新学习资料) Object Pascal 学习笔记---第2章第五节(日期和时间)
  • (Demo分享)利用原生JavaScript-随机数-实现做一个烟花案例
  • (Mac上)使用Python进行matplotlib 画图时,中文显示不出来
  • (Python第六天)文件处理
  • (react踩过的坑)antd 如何同时获取一个select 的value和 label值
  • (vue)el-tabs选中最后一项后更新数据后无法展开
  • (顶刊)一个基于分类代理模型的超多目标优化算法
  • (十三)Flink SQL
  • (一)80c52学习之旅-起始篇
  • (转)EXC_BREAKPOINT僵尸错误
  • (转)四层和七层负载均衡的区别
  • .helper勒索病毒的最新威胁:如何恢复您的数据?
  • .java 9 找不到符号_java找不到符号
  • .mat 文件的加载与创建 矩阵变图像? ∈ Matlab 使用笔记
  • .NET 4 并行(多核)“.NET研究”编程系列之二 从Task开始
  • .NET Core实战项目之CMS 第一章 入门篇-开篇及总体规划