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

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.dtcms.com/a/69866.html

相关文章:

  • Python(学习一)
  • Mac 上编译 Ragflow
  • Manus 技术探索 - 使用 gVisor 在沙箱内运行 Ubuntu 容器并通过远程浏览器访问
  • 【A2DP】深入解读A2DP中通用访问配置文件(GAP)的互操作性要求
  • python速通小笔记
  • 关于单一职责原则
  • 星型组网模块的两种交互方式优缺点解析
  • 【国际研讨会】2025年3-5月通信、算法、电气工程、自动化等领域国际学术会议征稿开启!大型学术盛宴!
  • console.log(MyEnum[0])和console.log(MyEnum.A)区别
  • Vue 自定义指令深度解析与应用实践
  • Mac下安装Zed以及Zed对MCP(模型上下文协议)的支持
  • 【eNSP实战】配置DHCP中继为非直连网段分配IP地址
  • AMI BIOS适配声卡
  • 数字孪生像魔镜,映照出无限可能的未来
  • leetcode0030 串联所有单词的子串-hard
  • WPF Prism事件聚合器EventAggregator
  • SQL与NoSQL的区别
  • Langchian构建代理
  • Django系列教程(12)——连接MySQL和PostgreSQL数据库
  • Devops CI/CD
  • 洛谷 P1962:斐波那契数列 ← 矩阵快速幂
  • JavaScript介绍-变量、常量、数据类型、类型转换
  • 车载以太网测试-13【网络层-IGMP协议】
  • 计算机网络——NAT
  • 深入解析大语言模型的 Function Call 实现—— 以 Qwen2.5为例
  • C# NX二次开发:在多个体的模型中如何实现拉伸操作布尔减
  • Java入职篇(5)—— IDEA快捷键
  • 使用 Docker 部署前端项目全攻略
  • DevOps实践:持续集成与持续部署完全指南
  • 图解AUTOSAR_CP_BSW_General