QT布局综述
一、布局的基本功能
布局的作用应该包括自动调整控件的位置和大小,这样当窗口大小变化时,控件能自适应。比如,当用户拖动窗口变大或缩小时,布局内的按钮、文本框等应该自动调整,而不是固定不动。
嵌套和组合布局的能力。复杂的界面通常需要多种布局组合,比如水平布局里嵌套垂直布局,或者使用网格布局来排列复杂的控件结构。用户可能需要构建比较复杂的界面,这时候布局的嵌套就很有用了
代码维护性方面。使用布局而不是手动设置位置和大小,可以让代码更简洁,更易于维护。比如,如果手动设置每个控件的位置,当需要调整界面时,可能要修改很多数值,而用布局的话,调整布局结构就可以了,这样代码更容易管理。
水平布局适合横向排列控件,垂直布局则是纵向,网格布局适合更复杂的排列,表单布局适合标签和输入框的对齐。
常见布局类型对比
布局类型 | 特点 | 适用场景 |
---|---|---|
QHBoxLayout | 水平排列控件 | 工具栏、一行按钮 |
QVBoxLayout | 垂直排列控件 | 侧边栏、纵向表单 |
QGridLayout | 网格形式排列,支持跨行/列合并 | 计算器按键、复杂仪表盘 |
QFormLayout | 两列布局,标签对齐输入框 | 用户注册表单、设置对话框 |
QStackedLayout | 层叠布局,同一区域切换不同页面 | 向导界面、Tab 页内容切换 |
二、布局管理器说明
1、Horizontal Layout布局设置(水平布局):他包含的对象都横向排列开:
2、Vertical Layout布局设置(垂直布局):他包含的对象都纵向排列开:
3、Grid Layout布局设置(网格布局):将控件放置到网格中布局,它本身会从父窗口或父布局中占据尽可能多的界面空间,然后把自己的空间划分为行和列,再把每个控件塞到设置好的一个或多个单元格中。通常情况下 QGridLayout不需要自己添加空白条 QSpacerItem,因为其他功能控件把各自的单元格占据之后,剩下没控件占据的单元格自然就是空的,空的格子默认里面什么都没有,也没有空白条。示例如下:
4、Form Layout布局设置(表格布局):专门用于管理输入控件和与之相关的标签等表单布局,QFormLayout固定为两列布局,并针对表单做了建模,配套了一堆方便使用的函数。网格布局器的基本单元是单元格,而表单布局器的基本单元是行。表单布局器是高度建模并封装的,它没有 addWidget()和 addLayout()之类的函数,它只有addRow()函数。表单布局器中一行的空间可以由多个控件占据,也可以由一个控件占据。示例如下图:
5、QSpliter分割器的作用:分裂器 QSplitter 是一个实体功能控件,它的基类是 QFrame,QFrame 基类正是 QWidget。QSplitter 可以独立存在,可以作为父窗口容纳多个子控件,分裂器会完全拥有内部的子控件。在 Qt 设计师或 QtCreator 设计模式左边 Widget Box 里面没有分裂器可以拖动,使用分裂器的方式是:选中已有的控件,然后点击上面工具栏的水平分裂器或垂直分裂器按钮。
Qt 共提供了 5 种布局管理器,每种布局管理器对应一个类,分别是 QVBoxLayout(垂直布局)、QHBoxLayout(水平布局)、QGridLayout(网格布局)、QFormLayout(表单布局)和 QStackedLayout(分组布局),它们的继承关系如下图所示: