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

Qt常用控件之Layout总篇

Layout总篇

1.Layout介绍

Layout 是一类布局管理器,它能够将 Layout 内部的控件都按照某种方式布局,简单高效地使代码更美观。在 Qt 中内置的 layout 有四种:QVBoxLayout(垂直布局)、QHBoxLayout(水平布局)、QGridLayout(网格布局)、QFormLayout(表单布局)。

在代码中创建的 layout,本质上就只创建了一个 layout。但在 ui 中创建的 layout,本质上是先创建一个 widget,再在这个 widget 中创建一个 layout。这两种方法的直观区别是:代码创建的 layout 会随着窗口尺寸变化而变化,layout 内部的控件也会随之变化;但 ui 创建的 layout 则是固定大小和位置,自然 layout 内部的控件也不会有任何变化。


注意,如果在一个 layout 中某些控件左右可以拉伸,但上下不可拉伸,或上下可以拉伸,左右不可拉伸,这是由该控件的 sizePolicy 属性造成的,sizePolicy 请看->Qt常见控件属性使用方法

2. Layout控件种类

  1. 垂直布局QVBoxLayout
  2. 水平布局QHBoxLayout
  3. 网格布局QGridLayout
  4. 表单布局QFormLayout

3. Layout嵌套布局

嵌套使用 layout 布局可以使用 addLayout() 完成。注意,在代码中调用 addLayout() 的位置会影响窗口的最终布局:

#include "widget.h"
#include "ui_widget.h"
#include <QPushButton>
#include <QLayout>

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);
    QPushButton* button1=new QPushButton("pushButton1");
    QPushButton* button2=new QPushButton("pushButton2");
    QPushButton* button3=new QPushButton("pushButton3");
    QPushButton* button4=new QPushButton("pushButton4");
    QPushButton* button5=new QPushButton("pushButton5");


    QVBoxLayout* Vlayout=new QVBoxLayout(this);
    QHBoxLayout* Hlayout=new QHBoxLayout(this);

    Hlayout->addWidget(button2);
    Hlayout->addWidget(button3);

    //Vlayout->addLayout(Hlayout);

    Vlayout->addWidget(button1);
    Vlayout->addWidget(button4);
    Vlayout->addLayout(Hlayout);
    Vlayout->addWidget(button5);
    //Vlayout->addLayout(Hlayout);

}

Widget::~Widget()
{
    delete ui;
}

Layout1

不同的调用顺序,会影响最终布局。


http://www.kler.cn/a/591918.html

相关文章:

  • 科技引领品质生活:三星生活家电用AI开启衣物洗护新纪元
  • 笔记本电脑关不了机是怎么回事 这有解决方法
  • Vue3 + ECharts 数据可视化实战指南
  • NAT技术-初级总结
  • java面试题之多线程
  • ViT、DETR 和 Swin Transformer :基于 Transformer 的计算机视觉(CV)模型
  • k8s中PAUSE容器与init容器比较 local卷与hostpath卷比较
  • docker-compose install nginx(解决fastgpt跨区域)
  • ModBus TCP/RTU互转(主)(从)|| Modbus主动轮询下发的工业应用 || 基于智能网关的串口服务器进行Modbus数据收发的工业应用
  • 基于SpringBoot的在线拍卖系统
  • RK3568笔记七十九:Web通信处理
  • 清华大学第12弹:《DeepSeek政务应用场景及解决方案》
  • 7种数据结构
  • 生成PDF文件:从html2canvas和jsPdf渲染到Puppeteer矢量图
  • 鸿蒙路由 HMRouter 配置及使用 三 全局拦截器使用
  • SWPU 2021 新生赛
  • 深入探讨TK矩阵系统:创新的TikTok运营工具
  • CVE-2018-2628(使用 docker 搭建)
  • MyBatis 基础使用指南
  • 分布式架构下的RPC解决方案