qt之页面布局

news/2024/5/4 10:54:43/文章来源:https://blog.csdn.net/qq_62309585/article/details/127022715

QTlayout概述

 

Qt的布局管理系统提供了强大的机制来自动排列窗口中的所有部件,确保它们有效地使用空间。Qt包含了一组布局管理类,从而在应用程序的用户界面中对部件进行布局,比如QLayout的几个子类,这里将它们称作布局管理器。所有QWidget的子类的实例(对象)都可以使用布局管理器管理位于它们之中的子部件,QWidget : ; setLay-out()函数可以在一个部件上应用布局管理器。一旦一个部件上设置了布局管理器,那么它会完成以下几种任务:

(1)定位子部件

(2)感知窗口默认大小

(3)感知窗口最小大小

(4)窗口大小变化进行处理

(5)当内容改变时进行处理

----字体大小、文本、或者子部件

-----隐藏或显示子部件

----移除子部件

布局管理器

QLayout类是布局管理器的基类,是一个抽象基类,继承自QObject 和 QLayou-tItem类,QLayoutItem类提供了一个供QLayout操作的抽象项目。QLayout和QLayoutItem都是在设计自己的布局管理器时才使用的,一般只需要使用QLayout的几个子类即可,它们分别是QBoxLayout(基本布局管理器).QGridLayout(栅格布局管理器),QFormLayout(窗体布局管理器)和QStackedLayout(栈布局管理器)。

基本布局管理器

基本布局管理器QBoxLayout类可以使子部件在水平方向或者垂直方向排成一列,它将所有的空间分成一行盒子,然后将每个部件放入一个盒子中。它有两个子类QHBoxLayout水平布局管理器和QVBoxLayout垂直布局管理器,编程中经常用到。再回到设计模式中看看布局管理器的属性。先单击主界面,查看它的属性栏,最后面的部分是其使用的布局管理器的属性

     QHBoxLayout *layout = new QHBoxLayout;      // 新建水平布局管理器layout->addWidget(ui->fontComboBox);        // 向布局管理器中添加部件layout->addWidget(ui->textEdit);layout->setSpacing(50);                     // 设置部件间的间隔layout->setContentsMargins(0, 0, 50, 100);  // 设置布局管理器到边界的距离// 四个参数顺序是左,上,右,下setLayout(layout);                          // 将这个布局设置为MyWidget类的布局

QGridLayout

栅格布局管理器QGridLayout类使部件在网格中进行布局,它将所有的空间分隔成一些行和列,行和列的交叉处形成了单元格,然后将部件放入一个确定的单元格中。先往界面上拖放一个Push Button,然后在mywidget. cpp中添加头文件#include<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);

这里主要是设置部件在栅格布局管理器中的位置,将fontComboBox部件设置为占据1行2列,而pushButton部件占据1行1列,这主要是为了将fontComboBox部件和 pushButton部件的长度设置为2+1。这样一来,textEdit部件要想占满剩下的空间,就要使它的跨度为3列。这里需要说明,当部件加入到一个布局管理器中,然后将这个布局管理器再放到一个窗口部件上时,这个布局管理器以及它包含的所有部件都会自动重新定义自己的父对象( parent)为这个窗口部件,所以在创建布局管理器和其中的部件时并不用指定父部件。

窗体布局器

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

Vertical Spacer

产生间隔,将它放在窗体布局管理器与水平布局管理器之间。最后单击主界面并按下Ctrl+L快捷键,让整个界面处于一个垂直布局管理器中。这时可以在右上角的对象列表中选择分隔符Spacer,然后在属性栏中设置它的高度为100,如图4-3所示。这时运行程序可以看到,分隔符是不显示的。

设置部位大小

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

伸缩因子

前面讲垂直布局管理器时曾提到过它,其实它是用来设置部件间比例的。界面上的字体选择框和一个按钮处于一个水平布局管理器中,现在想让它们的宽度比例为2:1,那么就可以单击对象栏中的horizontalLayout水平布局管理器对象,然后在它的属性栏中将layoutStretch 属性设置为“2,1”,这样这个水平布局管理器中的两个部件的宽度就是2:1的比例了。如果要在代码中进行设置,则可以在使用布局管理器的add Widget()函数添加部件的同时,在第二个参数中指定伸缩因子。

可拓展窗口

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

实战总结

效果图

 1.可拓展窗口如何实现

应用信号与槽

先检测 checkable 应用信号 toggled(bool)

 代码:

void Widget::on_pushButton_toggled(bool checked)
{ui->textEdit->setVisible(checked);if(checked)ui->pushButton->setText(tr("可隐藏效果"));else ui->pushButton->setText(tr("显示可拓展窗口"));}

 2.为什么年龄那一行长度不统一

 选中expandingfieldjiuxing啦 

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

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

相关文章

路由多视图单页应用router-link相关属性

目录 1 vue中文件及文件夹命名规范 2 SPA 2.1 SPA简介 2.2 SPA技术点 3 使用路由建立多视图单页应用 3.1 引入依赖库 3.2 创建自定义组件 相关知识点&#xff1a; 3.3 创建路由 3.3.1 什么是路由 3.3.2 定义路由 3.4 创建和挂载根实例 3.5 使用RouterLink和Router…

线程池基本知识

文章目录1 问题背景2 前言3 线程池是什么4 线程池核心设计与实现4.1 总体设计4.2 运行机制4.3 生命周期管理4.4 任务执行机制4.4.1 任务调度4.4.2 任务缓冲4.4.3 任务申请4.4.4 任务拒绝4.5 Worker线程管理4.5.1 Worker线程1 问题背景 前面总结了工作中的解决方案——电商项目之…

EEG巨型分析I:跨研究的频谱和振幅特征

导读 通过汇集多项研究的统计结果(元分析)&#xff0c;fMRI领域取得了重大成就。最近&#xff0c;fMRI标准化工作的重点是实现跨研究(巨型分析)的fMRI原始数据的联合分析&#xff0c;以期获得更详细的见解。然而&#xff0c;目前尚不清楚在EEG领域的此类分析是否可能或同样富有…

公众号如何搭建使用查题功能的方法

公众号如何搭建使用查题功能的方法 本平台优点&#xff1a; 多题库查题、独立后台、响应速度快、全网平台可查、功能最全&#xff01; 1.想要给自己的公众号获得查题接口&#xff0c;只需要两步&#xff01; 2.题库&#xff1a; 查题校园题库&#xff1a;查题校园题库后台&a…

Vue入门【三】-- 详解computed计算属性

目录 computed: ♡ ‧₊˚ 基本使用 ‧₊˚ ♡ ♡ ‧₊˚语法‧₊˚ ♡ ♡ ‧₊˚效果‧₊˚ ♡ ♡ ‧₊˚ 面试问点 ‧₊˚ ♡ computed与methods的区别&#xff1a; computed与watch的区别&#xff1a; computed: 首先我们要知道computed计算属性是什么&#xff0c;在v…

我是一名开发人员,但我不会教我的孩子编程

编程需要的不仅仅是儿童书籍中教授的简单干巴巴的语言。 长按关注《Python学研大本营》&#xff0c;加入读者群&#xff0c;分享更多精彩 在最近的一次深夜公式跑中&#xff0c;我路过一大堆关于教孩子编程的书籍。我在周围看过这些书&#xff0c;但从来没有这么大的针对小学生…

STM32时钟系统和TIMER配置(溢出中断/PWM)实例

目录&#xff1a; 1. STM32时钟系统 2. STM32的定时器典型配置之溢出中断 3. STM32的定时器典型配置之PWM输出 1. STM32时钟系统 &#xff08;1&#xff09;Clock tree 可以在官方手册(Stm32x-series-Reference-manual)的clock tree中可以对相应MCU的时钟系统有个大致了解…

数字信号处理——多速率信号处理(1)

目录 引言 1、抽取 MATLAB仿真代码 仿真结果 抽取滤波器 2、内插

《关于我摸鱼一天后搞定PyCharm这件事》Python环境配置

Anaconda部署 1.下载最新版匹配电脑的版本 我是 WIN-x64 下载Index of /anaconda/archive/ | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror 我是 Anaconda3-2022.05-Windows-x86_64 下载 社区版本Pycharm Download PyCharm: Python IDE for Professional Develo…

从零玩转jQuery(基础篇)

1.前言 &#xff08;window.onload和jQuery的相关介绍&#xff09; 分析一下&#xff0c;元素js的缺点: 1.不能添加多个入口函数&#xff08;window.onload),如果添加了多个&#xff0c;后面的会把前面的给覆盖。 2.原生js的api名字都太长太难记。 3.原生js有的时候代码冗余。 …

Maven坐标查找方法及Maven-Search 插件的使用(保姆级教学)

目录坐标的概念获取坐标方法一获取坐标方法二坐标的概念 坐标组成是groupid,artifiactld,version。坐标概念来自数学。 坐标作用:确定资源的&#xff0c;是资源的唯一标识。在maven中&#xff0c;每个资源都有坐标。坐标值是唯一的。简称叫gav。 拿servlet依赖举例 <!--serv…

nacos 简介和使用

Nacos 是阿里巴巴开源项目&#xff0c;用于构建微服务应用的服务发现、配置管理和服务管理。 在微服务项目中不同模块之间服务调用时&#xff0c;实现服务注册与发现。 Nacos 使用&#xff1a; Nacos 是java开发的&#xff0c;依赖 Java 环境来运行 Nacos的下载 https://git…

cobbler部署

cobbler部署 #先关闭防火墙和selinux [root@localhost ~]# systemctl disable firewalld [root@localhost ~]# setenforce 0 //cobbler服务,selinux必须得是disabled状态,所以要重启 [root@localhost ~]# vim /etc/selinux/config SELINUX=disabled [root@localhost ~]# reb…

BUUCTF-社团考核

目录 1.[CISCN2019 华东南赛区]Web4 2.[GWCTF 2019]枯燥的抽奖 3.[NCTF2019]Fake XML cookbook 4.[SCTF2019]Flag Shop 5.[GWCTF 2019]mypassword 6.[BSidesCF 2019]Kookie 7.[WUSTCTF2020]朴实无华 8.[网鼎杯 2020 白虎组]PicDown 9.[CISCN 2019 初赛]Love Math 10.攻…

深入ArrayList()源码

深入ArrayList()源码 jdk1.8 java.util; 扩容机制 新数组都将替代旧数组&#xff0c;旧数组作为垃圾被回收 ArrayList() 会使用长度为零的数组 private static final Object[] DEFAULTCAPACITY_EMPTY_ELEMENTDATA {};public ArrayList() {this.elementData DEFAULTCAPACITY…

采用 ALSTM 模型的温度和降雨关联预测研究论文学习记录

为了准确和及时预测局部区域的降雨及温度&#xff0c;提出了一种基于 Attention 和 LSTM 组合模型( ALSTM) 的关联多值预测算法。该算法利用天气时间序列中 的前期数据&#xff0c;对下一小时的降雨量和温度进行关联预测&#xff0c;以此实现对天气要素的多值预测。该算法首先对…

一个项目带你走进接口自动化测试

文章目录前言一、项目环境搭建二、项目分析三、框架搭建1、解决登录问题、获取token2、熟悉项目的接口请求方式、二次封装requests请求3、缓解业务请求接口参数臃肿4、重新封装logging日志5、通用方法编写四、编写自动化脚本场景业务需求单接口业务需求五、生成测试报告六、写在…

CSDN线上竞赛编程第六期参赛心得

CSDN编程竞赛报名地址&#xff1a;https://edu.csdn.net/contest/detail/16 &#xff08;请不要删掉此地址&#xff09; CSDN线上竞赛编程第六期参赛心得前言/背景大赛简介参赛流程参赛经历解题思路1、题目名称&#xff1a;严查枪火2、题目名称&#xff1a;鬼画符门3、题目名称…

HDMI/DVI____TMDS编码

一.编码步骤:基本方法:取第一位数据为初值,接下来输入的每一位与前一导出的位(根据判断条件)进行异或XOR或者同或XNOR(最小化传输);最后选择性反转这9bit数据(DC平衡处理)。 ①DE为高电平时,对8位RGB数据编码,第9bit表示采用了XOR / XNOR ,第10bit表示是否翻转。 …

04代码

import datetime #定义一个列表 mot=["今天星期一:\n坚持下去不是因为我很坚强,而是因为我别无选择。","今天星期二:\n含泪播种的人一定能笑着收获。","今天星期三:\n作对的事情比把事情做对更重要。","今天星期四:\n命运给予我们的不是失…