QT 学习第十四天 QWidget布局

QT 学习十四天 布局

  • 布局管理
    • Qt Widgets 布局
    • 布局管理器简介
    • 基本布局管理器
    • 栅格布局管理器
    • 窗体布局管理器
    • 综合使用布局管理器
    • 设置部件大小
    • 可扩展窗口

布局管理

今天讲 Qt Widgets 和 Qt Quick 中的布局。
前者主要用布局管理器
后者除了布局管理器还有基于锚的布局(anchors)

Qt Widgets 布局

Qt Widgets 包含一组布局管理类,用于布局如 QLayout 的几个子类,他们被成为布局管理器。
所有 QWidget 的子类的实例都可以使用布局管理器来管理它们的子部件。
QWidget::setLayout() 就可以在一个部件上应用布局管理器。如果一个部件设置了布局管理器,他会完成以下任务。

  • 定位子部件
  • 感知窗口默认大小
  • 感知窗口最小大小
  • 窗口大小变化时进行处理
  • 内容改变时自动更新,字体大小、文本或其他内容

讲讲 QLayout 类的几个子类。

布局管理器简介

QLayout 类时布局管理器的基类,是抽象基类,继承自 QObject 和 QLayoutltem 类。一般使用 QLayout 的子类就行。
QBoxLayout、QGridLayout、QFormLayout、QStackedLayout 都是QLayout的子类。

创建一个 QWidget 项目,在 ui 中 拖入一个 Font Combo Box 和一个 Text Edit,然后选择垂直布局,右击可以选择,上边布局栏里面也有,右边第二个是拆分布局。
在这里插入图片描述
这样就完成了顶层布局管理,因为是对整个窗口设置的布局管理器,所以叫作顶层布局管理器,拉伸窗口,两个部件会随着窗口的大小变化而变化,这就是布局管理器的作用

基本布局管理器

基本布局管理器 QBoxLayout 类可以使子部件在水平方向或者垂直方向排成一列,它将所有的空间分成一行盒子,然后将每个部件放入对应盒子中。它有两个子类:**QHBoxLayout(水平布局管理器)和QVBoxLayout(垂直布局管理器)**​。

下图是其使用的布局管理器的属性
在这里插入图片描述
我们用代码来设置布局。

QHBoxLayout *layout = new QHBoxLayout;     // 新建水平布局管理器
layout->addWidget(ui->fontComboBox);       // 向布局管理器中添加部件
// insertWidget() 可以向指定位置添加部件
layout->addWidget(ui->textEdit);
layout->setSpacing(50);                    // 设置部件间的间隔
layout->setContentsMargins(0, 0, 50, 100); // 设置布局管理器到边界的距离
setLayout(layout);                         // 将这个布局设置为MyWidget类的布局

栅格布局管理器

QGridLayout 栅格布局在网格中进行布局,将部件放入单元格中。我们在 ui 中拖入一个 PushButton,然后添加代码,要导入 QGridLayout。

QGridLayout *layout = new QGridLayout;
// 添加部件,从第0行0列开始,占据1行2列
layout->addWidget(ui->fontComboBox, 0, 0, 1, 2);
// 添加部件,从第0行2列开始,占据1行1列
layout->addWidget(ui->pushButton, 0, 2, 1, 1);
// 添加部件,从第1行0列开始,占据1行3列
layout->addWidget(ui->textEdit, 1, 0, 1, 3);
setLayout(layout);

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

窗体布局管理器

QFormLayout 类用来管理表单的输入部件和与他们相关的标签。

窗体布局管理器将它的子部件分为两列,左边是一些标签,右边是一些输入部件,比如行编辑器或数字选择框等。如果只是起到这样的布局作用,那么用QGridLayout就完全可以做到了,之所以添加QFormLayout类,是因为它有独特的功能。

在 ui 中拖入 Form Layout,在布局栏中选择也行。双击或右击选择“添加窗体布局行”。

会弹出对话框,填入标签文字“姓名(&N):​”​,这样下面便自动填写了“标签名称”​“字段类型”​“字段名称”等,并且设置了伙伴关系。这里使用了QLineEdit行编辑器,当然也可以选择其他部件。填写的标签文字中的“(&N)”必须使用英文半角的括号,表明快捷键是Alt+N。设置伙伴关系表示当按下Alt+N时,光标会自动跳转到标签后面对应的行编辑器中。单击“确定”按钮,则会在布局管理器中添加一个标签和一个行编辑器。按照这种方法,再添加3行:性别(&S),字段类型选择QComoBox;年龄(&A),字段类型选择QSpinBox;邮箱(&M),字段类型选择QLineEdit。完成后运行程序,可以按下快捷键Alt+N,这样光标就可以定位到“姓名”标签后的行编辑器中。

上面添加表单行是在设计器中完成的,其实也可以在代码中使用**addRow()**函数来完成。

综合使用布局管理器

我们从部件列表窗口中拖入一个Horizontal Layout,然后随便放两个部件进去。再从部件列表窗口中拖入一个垂直分隔符Vertical Spacer,用来在部件间产生间隔,将它放在窗体布局管理器与水平布局管理器之间。最后单击主界面并按下Ctrl+L快捷键,让整个界面处于一个垂直布局管理器中。这时可以在右上角的对象查看器中选择MyWidget对象,然后在属性编辑器的最后将layoutStretch设置为“4,1,1,10”​。运行程序,可以看到分隔符是不显示的。

这里综合使用了窗体布局管理器、水平布局管理器和垂直布局管理器,其中垂直布局管理器是顶级布局管理器,因为它是主界面的布局管理器,其他两个布局管理器都包含在它里面。如果要使用代码将一个子布局管理器放入一个父布局管理器之中,可以使用父布局管理器的**addLayout()**函数。

设置部件大小

大小提示(sizeHint)和最小大小提示(minimumSizeHint)。凡是继承自QWidget的类都有这两个属性,其中sizeHint属性保存了部件的建议大小,对于不同的部件,默认拥有不同的sizeHint;而minimumSizeHint保存了一个建议的最小大小提示。可以在程序中使用sizeHint()函数来获取sizeHint的值,使用minimumSizeHint()函数获取minimumSizeHint的值。需要说明的是,如果使用setMinimumSize()函数设置了部件的最小大小,那么最小大小提示将会被忽略。这两个属性在使用布局时起到了很重要的作用。

来看一下大小策略(sizePolicy)属性,它也是QWidget类的属性。这个属性保存了部件的默认布局行为,在水平和垂直两个方向分别起作用,控制着部件在布局管理器中的大小变化行为。QSizePolicy类大小策略的取值如表所示。
在这里插入图片描述

可扩展窗口

一个窗口可能有很多选项是扩充的,只有在必要的时候才显示出来,这时可以使用一个按钮来隐藏或者显示多余的内容,就是所谓的可扩展窗口。可扩展窗口依赖于布局管理器的特性,那就是当子部件隐藏时,布局管理器自动缩小,当子部件重新显示时,布局管理器再次放大。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

jangow靶机

打开靶机,打开kali,有的人会发现扫不到靶机的ip 在网上搜索了半天,发现是靶机的网卡配置有问题 重启靶机,选第二个 进去后再选第二个,按e 找到ro这一行 把ro后面这一行的内容都替换成ro rw signin init/bin/bash ctr…

redis开发与运维-redis0401-补充-redis流水线与Jedis执行流水线

文章目录 【README】【1】redis流水线Pipeline【1.1】redis流水线概念【1.2】redis流水线性能测试【1.2.1】使用流水线与未使用流水线的性能对比【1.2.2】使用流水线与redis原生批量命令的性能对比【1.2.3】流水线缺点 【1.3】Jedis客户端执行流水线【1.3.1】Jedis客户端执行流…

KOI技术-事件驱动编程(Sping后端)

1 “你日渐平庸,甘于平庸,将继续平庸。”——《以自己喜欢的方式过一生》 2. “总是有人要赢的,那为什么不能是我呢?”——科比布莱恩特 3. “你那么憎恨那些人,和他们斗了那么久,最终却要变得和他们一样,…

小程序配置文件 —— 14 全局配置 - tabbar配置

全局配置 - tabBar配置 tabBar 字段:定义小程序顶部、底部 tab 栏,用以实现页面之间的快速切换;可以通过 tabBar 配置项指定 tab 栏的表现,以及 tab 切换时显示的对应页面; 在上面图中,标注了一些 tabBar …

小程序基础 —— 08 文件和目录结构

文件和目录结构 一个完整的小程序项目由两部分组成:主体文件、页面文件: 主体文件:全局文件,能够作用于整个小程序,影响小程序的每个页面,主体文件必须放到项目的根目录下; 主体文件由三部分组…

使用ArcGIS/ArcGIS pro绘制六边形/三角形/菱形渔网图

在做一些尺度分析时,经常会涉及到对研究区构建不同尺度的渔网进行分析,渔网的形状通常为规则四边形。构建渔网的方法也很简单,使用ArcGIS/ArcGIS Pro工具箱中的【创建渔网/CreateFishnet】工具来构建。但如果想构建其他形状渔网进行相关分析&…

【K8S问题系列 | 21 】K8S中如果PV处于Bound状态,如何删除?【已解决】

在Kubernetes(K8S)的存储管理体系中,持久卷(PersistentVolume,PV)是一种重要的资源,它为Pod提供了持久化存储能力。当PV处于Bound状态时,意味着它已经与某个持久卷声明(P…

旅游管理系统|Java|SSM|VUE| 前后端分离

【技术栈】 1⃣️:架构: B/S、MVC 2⃣️:系统环境:Windowsh/Mac 3⃣️:开发环境:IDEA、JDK1.8、Maven、Mysql5.7 4⃣️:技术栈:Java、Mysql、SSM、Mybatis-Plus、VUE、jquery,html 5⃣️数据库可…

Qt5 中 QGroupBox 标题下沉问题解决

我们设置了QGroupBox 样式之后,发现标题下沉了,那么如何解决呢? QGroupBox {font: 12pt "微软雅黑";color:white;border:1px solid white;border-radius:6px; } 解决后的效果 下面是解决方法: QGroupBox {font: 12pt "微软雅黑";color:white;bo…

六大基础深度神经网络之CNN

左侧是传统卷积网络输入的是一列像素点,右侧是卷积神经网络,输入的是具有长宽通道数的原始图像 下图为整体架构。卷积层可以认为提取特征,池化层是压缩特征。全连接层是把图像展平然后计算10个类别的概率值 给出一张图像不同区域的特征不同&a…

抽象工厂设计模式的理解和实践

在软件开发中,设计模式是前人通过大量实践总结出的、可复用的、解决特定问题的设计方案。它们为我们提供了一种标准化的解决方案,使得代码更加简洁、灵活和易于维护。在众多设计模式中,抽象工厂模式(Abstract Factory Pattern&…

从入门到精通:Vim 高效文本编辑全面指南

文章目录 前言🧬一、Vim 的编辑哲学:模式分离与高效键盘操作🧬二、基础命令与快捷键:从简单到熟悉🧬三、进阶功能:多文件、分屏与可视化模式🧬四、自定义配置与 .vimrc:打造你的专属…

大模型-ChatGLM2-6B模型部署与微调记录

大模型-ChatGLM2-6B模型部署与微调记录 模型权重下载: 登录魔塔社区:https://modelscope.cn/models/ZhipuAI/chatglm2-6b 拷贝以下代码执行后,便可快速权重下载到本地 # 备注:最新模型版本要求modelscope > 1.9.0 # pip insta…

连锁餐饮行业数据可视化分析方案

引言 随着连锁餐饮行业的迅速发展,市场竞争日益激烈。企业需要更加精准地把握运营状况、消费者需求和市场趋势,以制定科学合理的决策,提升竞争力和盈利能力。可视化数据分析可以帮助连锁餐饮企业整合多源数据,通过直观、动态的可…

NiChart 多模态神经影像(structural MRI,functional MRI,and diffusion MRI)处理和分析工具包安装

NiChart多模态神经影像部署 NiChart 本地安装Git clone 问题personal access token PAT 问题 NiChart 云端注册AWS验证问题 NiChart 是UPenn大学,Christos Davatzikos教授开发的一个多模态MRI影像,structural (sMRI), diffusion (dMRI), and …

人工智能与云计算的结合:如何释放数据的无限潜力?

引言:数据时代的契机 在当今数字化社会,数据已成为推动经济与技术发展的核心资源,被誉为“21世纪的石油”。从个人消费行为到企业运营决策,再到城市管理与国家治理,每个环节都在生成和积累海量数据。然而,数…

【代码分析】Unet-Pytorch

1:unet_parts.py 主要包含: 【1】double conv,双层卷积 【2】down,下采样 【3】up,上采样 【4】out conv,输出卷积 """ Parts of the U-Net model """import torch im…

构建全志 T113 Tina SDK

1、环境配置: 准备一个 Ubuntu 系统,可以是 WSL,虚拟机等,建议版本是 20.04。 1.1、安装必要的软件 进入系统后,输入下方命令安装需要的工具 : sudo apt update -y sudo apt full-upgrade -y sudo apt i…

深度学习:基于MindSpore NLP的数据并行训练

什么是数据并行? 数据并行(Data Parallelism, DP)的核心思想是将大规模的数据集分割成若干个较小的数据子集,并将这些子集分配到不同的 NPU 计算节点上,每个节点运行相同的模型副本,但处理不同的数据子集。…

python爬虫爬抖音小店商品数据+数据可视化

爬虫代码 爬虫代码是我调用的数据接口,可能会过一段时间用不了,欢迎大家留言评论,我会不定时更新 import requests import time cookies {token: 5549EB98B15E411DA0BD05935C0F225F,tfstk: g1vopsc0sQ5SwD8TyEWSTmONZ3cA2u6CReedJ9QEgZ7byz…