Qt | 关于界面开发的布局管理 QLayout

526 阅读3分钟

「这是我参与2022首次更文挑战的第26天,活动详情查看:2022首次更文挑战」。

环境:Qt Creator5.5.1

前言:

其实Qt中界面开发的一个优势就是QLayout(布局)和QSpacer(弹簧)的结合。通过在Qt Designer中将需要的控件拖到窗口中,在窗口中添加QLayout和QSpacer以确定控件的位置,将所有可视化的控件全部在窗口中布局好,这样一来,代码只需实现功能就可以了,界面布局的代码就会少很多,而且很方便,可以加快页面的开发速度。

QLayout类关系图:

微信图片_20220217095823.jpg

布局管理系统:

Qt的布局管理系统提供了强大的机制来自动排列窗口中的所有部件,确保它们有效地使用空间。

所有QWidget的子类的实例(对象)都可以使用布局管理器管理位于它们之中的子部件,可以通过QWidget::setLayout()函数在一个部件上应用布局管理器,也可以在Qt Designer中右键选中部件,选择布局来添加。QWidget在添加布局时,要先确保QWidget中有子部件的存在,否则这时布局管理是不可用的状态。

一旦一个部件设置了布局管理器,那它会完成下面这些事情:

  • 定位子部件;

  • 感知窗口默认大小;

  • 感知窗口最小大小;

  • 窗口大小变化时进行处理;

  • 当内容改变时自动更新:

    ——字体大小、文本或子部件的其他内容随之改变;

    ——隐藏或显示子部件;

    ——移除一个子部件。

布局管理器:

一般需要用到的布局管理器有:

  1. QBoxLayout(基本布局管理器;又分为:QHBoxLayout(水平布局管理器)和QVBoxLayout(垂直布局管理器))
  2. QGridLayout(栅格布局管理器)
  3. QFormLayout(窗体布局管理器)
  4. QStackedLayout(栈布局管理器)

布局管理器常用属性:

属性说明
layoutName现在所使用的布局管理器的名称
layoutLeftMargin设置布局管理器到界面左边界的距离
layoutTopMargin设置布局管理器到界面上边界的距离
layoutRightMargin设置布局管理器到界面右边界的距离
layoutBottomMargin设置布局管理器到界面下边界的距离
layoutSpacing布局管理器中各个子部件间的距离
layoutStretch伸缩因子
layoutSizeConstraint设置大小约束条件

基本布局管理器(QBoxLayout):

基本布局管理器QBoxLayout类可以使子部件在水平方向或者垂直方向排成一列。

栅格布局管理器(QGridLayout):

栅格布局管理器QGridLayout类使部件在网格中进行布局,它将所有的控件分隔成网格,将部件放入某一个单元格中。

窗体布局管理器(QFormLayout):

用来管理表单的输入部件以及与它们相关的标签。窗体布局管理器将它的子部件分为两列,左边是一些标签,右边是一些输入部件。

一般主要应用在登录时输入账号、密码;输入个人信息如:姓名:+输入框。

注: 当部件加入到一个布局管理其中,然后将这个布局管理器再放到一个窗口部件上时,这个布局以及它包含的所有部件都会重新定义自己的父对象(parent)为这个窗口部件,所以在创建布局管理器和其中的部件时不用指定父部件。

在页面上不可能所有控件都排的满满当当,这时就需要用到QSpacer,用来在部件之间产生间隔。QSpacer分为水平分隔符和垂直分隔符。

使用布局的效果图:

页面中红色框为布局(QLayout),蓝紫色长条为弹簧(QSpacer),还有其他的控件。 image.png