Qt:15.布局管理器(QVBoxLayout-垂直布局、QHBoxLayout-水平布局、QGridLayout-网格布局、拉伸系数,控制控件显示的大小)

news2024/11/13 14:49:48

目录

一、QVBoxLayout-垂直布局:

1.1QVBoxLayout介绍:

1.2 属性介绍:

1.3细节理解:

二、QHBoxLayout-水平布局:

三、QGridLayout-网格布局:

3.1QGridLayout介绍:

3.2常用方法:

四、拉伸系数,控制控件显示的大小:

4.1拉伸系数介绍:

4.2水平拉伸-控件的宽度:

4.3控件的大小策略:

4.4垂直拉伸-控件的高度:


一、QVBoxLayout-垂直布局:

1.1QVBoxLayout介绍:

  • QVBoxLayout 是Qt中的一个布局管理器。
  • 用于将子控件垂直排列。它会自动调整子控件的大小和位置,使它们在垂直方向上依次排列,占据可用的空间。
  • 将控件添加到布局管理器:layout->addWidget(控件名);
  • 将布局管理器挂到对象树:this->setLayout(layout_1);
  • 将布局管理器添加到布局管理器:layout_1->addLayout(layout_2);

1.2 属性介绍:

layoutLeftMargin
  • 设置布局左侧的边距。
  • 获取当前左边距:layout->contentsMargins().left()
layoutTopMargin
  • 设置布局顶部的边距。
  • 获取当前顶部边距:layout->contentsMargins().top()
layoutRightMargin
  • 设置布局右侧的边距。
  • 获取当前右边距:layout->contentsMargins().right()
layoutBottomMargin
  • 设置布局底部的边距。
  • 获取当前底部边距:layout->contentsMargins().bottom()
layoutSpacing
  • 设置子控件之间的间距。
  • 获取当前间距:layout->spacing()
  • 设置间距:layout->setSpacing(spacing)
layoutStretch
  • 设置子控件的伸缩因子。
  • 设置伸缩因子:layout->setStretch(index, stretch)
  • 获取当前伸缩因子:layout->stretch(index)
layoutSizeConstraint
  • 设置布局的尺寸约束。
  • 获取当前尺寸约束:layout->sizeConstraint()
  • 设置尺寸约束:layout->setSizeConstraint(constraint)

1.3细节理解:

  • 一个Widget只能创建一个布局管理器。
  • 通过代码创建的布局管理器,调整窗口的大小,里面的控件也会随之拉伸。
  • 通过ui界面可以创建多个布局管理器,但是创建多余一个的布局管理器前,会先创建一个Widget,此时拉申程序的窗口,控件不会随着伸缩。

二、QHBoxLayout-水平布局:

  • QHBoxLayout 是Qt中的一个布局管理器。
  • 用于将子控件水平排列。它会自动调整子控件的大小和位置,使它们在水平方向上依次排列,占据可用的空间。
  • 属性和垂直布局相同。

三、QGridLayout-网格布局:

3.1QGridLayout介绍:

  • QGridLayout 是 Qt 中的一种布局管理器,用于在网格中排列子控件。它允许在特定的行和列中添加控件或其他布局。

3.2常用方法:

void addLayout(QLayout *layout, int row, int column)
  • 将子布局添加到特定位置
  • layout:要添加的子布局。
  • row:子布局所在的行。
  • column:子布局所在的列。
void addLayout(QLayout *layout, int row, int column, int rowSpan, int columnSpan)
  • 将子布局添加到特定位置,并指定行跨度和列跨度
  • layout:要添加的子布局。
  • row:子布局起始行。
  • column:子布局起始列。
  • rowSpan:子布局占用的行数。
  • columnSpan:子布局占用的列数。

四、拉伸系数,控制控件显示的大小:

4.1拉伸系数介绍:

  • 通过代码创建的控件,将它添加到布局管理器后,他们的大小是均等的。
  • 如果要创建出大小不同的控件,就需要通过拉伸系数设置控件。
  • 拉伸系数就相当于设置控件之间的比例。

4.2水平拉伸-控件的宽度:

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);

    //创建6个按钮
    QPushButton* b1=new QPushButton("1");
    QPushButton* b2=new QPushButton("2");
    QPushButton* b3=new QPushButton("3");
    QPushButton* b4=new QPushButton("4");
    QPushButton* b5=new QPushButton("5");
    QPushButton* b6=new QPushButton("6");

    //创建一个网格布局控制器,并将6个按钮分为两行,每行三个
    QGridLayout* layout=new QGridLayout();
    layout->addWidget(b1,0,0);
    layout->addWidget(b2,0,1);
    layout->addWidget(b3,0,2);
    layout->addWidget(b4,1,0);
    layout->addWidget(b5,1,1);
    layout->addWidget(b6,1,2);

    //设置拉伸系数
    this->setLayout(layout);
    layout->setColumnStretch(0,1);
    layout->setColumnStretch(1,3);
    layout->setColumnStretch(2,5);

}

  • 如果将拉伸系数设为0,那么对应列的控件的水平宽度是一个固定值,不再参与比例拉伸。
  • 设置水平拉伸因子:layout->setColumnStretch(column,stretch);

4.3控件的大小策略:

  • 在 Qt 中,控件的大小策略(QSizePolicy)定义了控件在布局管理器中的行为方式,包括如何在水平和垂直方向上拉伸和收缩。默认情况下,控件的 QSizePolicy 会影响它们在布局中的拉伸和缩放行为。
  • 每个控件在创建时都有一个默认的 QSizePolicy。QSizePolicy 包含两个主要属性:水平策略和垂直策略。
  • 不同控件可能有不同的默认策略。
  • QSizePolicy 主要有以下几种常见的策略:
  • QSizePolicy::Fixed:控件的大小是固定的,不会改变。
  • QSizePolicy::Minimum:控件可以收缩到比推荐的大小更小,但不会拉伸。
  • QSizePolicy::Maximum:控件可以拉伸到比推荐的大小更大,但不会收缩。
  • QSizePolicy::Preferred:控件会根据其推荐的大小进行调整,但可以在必要时拉伸或收
  • 缩。
  • QSizePolicy::Expanding:控件会尽可能地拉伸以填充可用空间。
  • QSizePolicy::Ignored:控件的大小不受其内容或推荐大小的影响,可以任意调整。

4.4垂直拉伸-控件的高度:

  • label的水平拉伸默认策略为QSizePolicy::Expanding,但是他的垂直拉伸的默认策略是QSizePolicy::Fixed。
  • 如果想要和水平拉伸一样自由拉伸,就要手动设置label的拉伸策略为QSizePolicy::Expanding。
  • 下面通过两个图片对比设置拉伸策略后的差异:

        

        

  • 当垂直方向可以自由拉伸之后。就可以设置比例拉伸了。
  • 设置垂直拉伸因子:layout->setRowStretch(column,stretch);

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1916315.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

iMazing 3.0.3.1Mac中文破解版下载安装激活

今天,小编要分享的是Mac下一款可以帮助用户管理IOS设备的软件——iMazing,之前,小编也分享的过类似的软件,iMazing却有独特之处。小子这次带来的是3.0.3.1版本。 iMazing 3是一款iOS设备管理软件,该软件支持对基于iOS…

【STM32学习】cubemx配置,串口的使用,串口发送接收函数使用,以及串口重定义、使用printf发送

1、串口的基本配置 选择USART1,选择异步通信,设置波特率 选择后,会在右边点亮串口 串口引脚是用来与其他设备通信的,如在程序中打印发送信息,电脑上打开串口助手,就会收到信息。 串口的发送接收&#xff0…

机器学习筑基篇,容器调用显卡计算资源,Ubuntu 24.04 快速安装 NVIDIA Container Toolkit!...

[ 知识是人生的灯塔,只有不断学习,才能照亮前行的道路 ] Ubuntu 24.04 安装 NVIDIA Container Toolkit 什么是 NVIDIA Container Toolkit? 描述:NVIDIA Container Toolkit(容器工具包)使用户能够构建和运行 GPU 加速的容器,该工具包括一个容器运行时库和实用程序,用于自动…

新能源汽车充电站远程监控系统S275钡铼技术无线RTU

新能源汽车充电站的远程监控系统在现代城市基础设施中扮演着至关重要的角色,而钡铼技术的S275无线RTU作为一款先进的物联网数据监测采集控制短信报警终端,为充电站的安全运行和高效管理提供了强大的技术支持。 技术特点和功能 钡铼S275采用了基于UCOSI…

【PTA天梯赛】L1-006 连续因子(20分)

作者:指针不指南吗 专栏:算法刷题 🐾或许会很慢,但是不可以停下来🐾 文章目录 题目题解题意步骤 总结 题目 题目链接 题解 题意 求解n的最长连续因子 和因子再相乘的积无关,真给绕进去了 步骤 双重循…

D-走一个大整数迷宫(牛客月赛97)

题意:给两个n行m列的矩阵a和b,计数器,只有当计数器的值模(p-1)时出口才打开,要从左上走到右下,求最快多久走出迷宫。 分析:无论2的bij次方有多大p的2的bij次方的次方取模&#xff0…

前端vue 实现取色板 的选择

大概就是这样的 一般的web端框架 都有自带的 的 比如 ant-design t-design 等 前端框架 都是带有这个的 如果遇到没有的我们可以自己尝试开发一下 简单 的 肯定比不上人家的 但是能用 能看 说的过去 我直接上代码了 其实这个取色板 就是一个input type 是color 的input …

云视频监控中的高效视频转码策略:视频汇聚EasyCVR平台H.265自动转码H.264能力解析

随着科技的快速发展,视频监控技术已经广泛应用于各个领域,如公共安全、商业管理、教育医疗等。与此同时,视频转码技术作为视频处理的关键环节,也在不断提高视频的质量和传输效率。 一、视频监控技术的演进 视频监控技术的发展历…

【基于R语言群体遗传学】-16-中性检验Tajima‘s D及连锁不平衡 linkage disequilibrium (LD)

Tajimas D Test 已经开发了几种中性检验,用于识别模型假设的潜在偏差。在这里,我们将说明一种有影响力的中性检验,即Tajimas D(Tajima 1989)。Tajimas D通过比较数据集中的两个𝜃 4N𝜇估计值来…

nssm的下载和使用

nssm(Non-Sucking Service Manager)是一个用于在Windows系统上管理服务的工具。它允许你将.exe文件和.bat文件转换为Windows服务,并提供了一些功能来管理这些服务。 下载和安装 首先,你需要从nssm官方网站(https://n…

顺序结构 ( 四 ) —— 标准数据类型 【互三互三】

序 C语言提供了丰富的数据类型,本节介绍几种基本的数据类型:整型、实型、字符型。它们都是系统定义的简单数据类型,称为标准数据类型。 整型(integer) 在C语言中,整型类型标识符为int。根据整型变量的取值范…

HTML 标签简写和全称及其对应的中文说明和实例

<!DOCTYPE html> <html lang"zh-CN"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>HTML 标签简写及全称</title><style>…

C/C++ list模拟

模拟准备 避免和库冲突&#xff0c;自己定义一个命名空间 namespace yx {template<class T>struct ListNode{ListNode<T>* _next;ListNode<T>* _prev;T _data;};template<class T>class list{typedef ListNode<T> Node;public:private:Node* _…

宝塔:如何开启面板ssl并更新过期ssl

1、登录宝塔面板 > 前往面板设置 > 最上方的安全设置 > 面板SSL > 面板SSL配置 打开后先查看自签证书的时间&#xff0c;如果时间是已经过期的&#xff0c;就前往这个目录&#xff0c;将该目录下所有文件都删掉 重新回到面板SSL配置的位置&#xff0c;打开后会看到…

web后端开发--请求响应

目录 前言 请求 简单参数 原始方法 Spring方式 Post请求乱码处理 实体参数 简单实体参数 复杂实体参数 ​编辑 数组集合参数 数组参数 ​编辑 集合参数 日期参数 ​编辑 Json参数 ​编辑 传递json数据 json数组 json对象&#xff08;POJO&#xff09; jso…

conda篇----在已有conda环境的基础上升级python包

conda篇----在已有conda环境的基础上升级python包 原先的python版本 第一步&#xff1a; conda update --all(py11) [xxxaivrs01 xxx]$ conda update --all Collecting package metadata (current_repodata.json): done Solving environment: done> WARNING: A newer vers…

PTC可复位保险丝 vs 传统型保险丝:全面对比分析

PTC可复位保险丝&#xff0c;又称为自恢复保险丝、自恢复熔断器或PPTC保险丝&#xff0c;是一种电子保护器件。它利用材料的正温度系数效应&#xff0c;即电阻值随温度升高而显著增加的特性&#xff0c;来实现电路保护。 当电路正常工作时&#xff0c;PTC保险丝呈现低阻态&…

可理解性评估:使用Google Gemini优化语音识别的意义保留

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

从零开始实现大语言模型(三):Token Embedding与位置编码

1. 前言 Embedding是深度学习领域一种常用的类别特征数值化方法。在自然语言处理领域&#xff0c;Embedding用于将对自然语言文本做tokenization后得到的tokens映射成实数域上的向量。 本文介绍Embedding的基本原理&#xff0c;将训练大语言模型文本数据对应的tokens转换成Em…

MongoDB - 集合和文档的增删改查操作

文章目录 1. MongoDB 运行命令2. MongoDB CRUD操作1. 新增文档1. 新增单个文档 insertOne2. 批量新增文档 insertMany 2. 查询文档1. 查询所有文档2. 指定相等条件3. 使用查询操作符指定条件4. 指定逻辑操作符 (AND / OR) 3. 更新文档1. 更新操作符语法2. 更新单个文档 updateO…