QT 布局,控件自适应大小 自动缩放 自动布局

2023-11-16

目录

前言

1. 先来说简单的布局控件自适应

说明我们实现了自动布局;

3.通过代码设置控件自动缩放重写resizeEvent

4. 源码:https://upload.csdn.net/creation/uploadResources/86620882


前言

QT版本:Qt5.12.3(msvc2017_64)

有时,我们需要我们的布局或控件,随窗口变化而变化;这时就要求我们注意一下;

1. 先来说简单的布局控件自适应

首先拖动两个 verticalLayout 放到窗口;

 右击空白处;右键菜单 ->布局->栅格布局;

 可以看到已经有点会自动布局的样子;接着我们加入两个Label,Labe会自动占满一个布局;

我们设置Label 文字居中;

 上面是非全屏前显示;

上面是全屏后显示,位置依然是居中的;

说明我们实现了自动布局;

2.不是每个控件,都会自适应占整个父控件空间;有时我们也不需要它一直变大,可以通过以下属性设置大小;

结合控件的SizePolicy属性,来控制布局管理中的控件的尺寸自适应方式。
控件的sizePolicy说明控件在布局管理中的缩放方式。下面列举了一些最长用的值:
a. Fixed:控件不能放大或者缩小,控件的大小就是它的sizeHint。
b. Minimum:控件的sizeHint为控件的最小尺寸。控件不能小于这个sizeHint,但是可以放大。
c. Maximum:控件的sizeHint为控件的最大尺寸,控件不能放大,但是可以缩小到它的最小的允许尺寸。
d. Preferred:控件的sizeHint是它的sizeHint,但是可以放大或者缩小
e. Expanding:控件可以自行增大或者缩小
注:sizeHint(布局管理中的控件默认尺寸,如果控件不在布局管理中就为无效的值)
 

3.通过代码设置控件自动缩放重写resizeEvent

这样可以控件指定控件变化;

思路如下:

一、获取我们当前窗口宽高  m_oldWidth ,m_oldHeight 。
二、在resizeEvent  获取新宽高/旧的宽高,求出缩放比例。
用需要缩放的子控件乘 缩放值, 下面是获取所有窗口上的按钮与标签,进行缩放。

void MainWindow::resizeEvent(QResizeEvent *event)
{
    int Width = ui->centralWidget->width();
    int  Height = ui->centralWidget->height();

    float  scaleX = Width*1.0/m_oldWidth*1.0;
    float  scaleY = Width*1.0/m_oldWidth*1.0;
    QList<QPushButton*> buttonList = ui->widget->findChildren<QPushButton*>();
    for(auto it=buttonList.begin();it!=buttonList.end();it++)
    {
        int oldX = it.i->t()->x();
        int oldY = it.i->t()->y();
        int oldW = it.i->t()->width();
        int oldH = it.i->t()->height();
        it.i->t()->move(oldX*scaleX, oldY*scaleY);
        it.i->t()->resize(oldW*scaleX, oldH*scaleY);
    }
    QList<QLabel*>labelList = ui->widget->findChildren<QLabel*>();
    for(auto it=labelList.begin();it!=labelList.end();it++)
    {
        int oldX = it.i->t()->x();
        int oldY = it.i->t()->y();
        int oldW = it.i->t()->width();
        int oldH = it.i->t()->height();
        it.i->t()->move(oldX*scaleX, oldY*scaleY);
        it.i->t()->resize(oldW*scaleX, oldH*scaleY);
    }
    m_oldWidth = Width;
    m_oldHeight = Height;
}

4. 源码:https://upload.csdn.net/creation/uploadResources/86620882

推荐

 Qt 不规则窗口,不规则按钮,不规划控件 不规则界面_恋恋西风的博客-CSDN博客

Qt 窗口 无边框化,移动,大小调整_恋恋西风的博客-CSDN博客

Qt 停靠悬浮窗口 使用实例_恋恋西风的博客-CSDN博客

Qt 在程序中动态添加 删除 View 布局 或控件_恋恋西风的博客-CSDN博客

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

QT 布局,控件自适应大小 自动缩放 自动布局 的相关文章

随机推荐

  • Android NDK 编译时出现make (e=2): 系统找不到指定的文

    今天编译一个so文件时出现如下错误 C Users xxj Desktop test OpenCamera gt ndk build armeabi v7a Compile SeetafaceSo lt face detection cpp
  • java中访问修_Java中常见的访问/非访问修饰符

    Java中常见的访问 非访问修饰符 Java中常见的访问 非访问修饰符 1 Java中有下列常见访问修饰符 private 私有变量和方法 非外部类 只能被声明它们的类的实例所使用 default 类中的数据 方法和它本身能够被声明为默认d
  • 如何新建Quartus工程—FPGA入门教程

    这一章我们来实现第一个FPGA工程 LED流水灯 我们将通过流水灯例程向大家介绍一次完整的FPGA开发流程 从新建工程 代码设计 综合实现 管脚约束 下载FPGA程序 掌握本章内容 大家就算正式的开始入门FPGA开发了 1 1 2 新建工程
  • 老Java程序员花两天做了个消消乐(天天爱消除)

    老Java程序员花两天做了个消消乐 天天爱消除 引言 一直就想做一个消消乐 这次正好找到了素材 就自己琢磨写了一个 我觉得这个游戏难点就在消除 以及消除后的下落 其他的地方也就还好 这次做完了写个文章大家唠一波 效果图 实现思路 1 绘制窗
  • PostgreSQL

    PostgreSQL 是一个免费的对象 关系数据库服务器 ORDBMS 在灵活的BSD许可证下发行 PostgreSQL 开发者把它念作 post gress Q L PostgreSQL 的 Slogan 是 世界上最先进的 开源关系型数
  • VMware16虚拟机安装及配置(保姆级教程),这一篇就够了

    1 虚拟机VMware的下载官网地址 https www vmware com cn html VMware 安装 1 打开下载好的 exe 文件 即可开始安装 2 点击下一步 3先勾选我接受许可协议中的条款 然后点击下一步 4 自定义安装
  • 05-----撤销add,commit,push的方法(包括如何删除已经push到远程库的单个文件或者文件夹)

    1 撤销add添加的多余文件 git reset filename 撤销add到缓冲区的部分文件 2 撤销commit的多余文件 git log 先使用查看已经提交的commitId节点 git reset commit id 回退到上一个
  • 为什么我选用了springcloud而不是dubbo

    写好的代码越来越满足不了需求 因为需求总是在不断的变化 在技术选型时 实在是心有余而力不足 思来想去 就考虑了使用微服务架构来实现 功能模块化 今天主要讲讲为什么需要微服务架构 还是以故事的形式呈现 一 认识微服务 阶段一 单体服务 话说小
  • C语言密码破译

    请用C语言编程序将 China 译成密码 密码规律是 用原来的字母后面第4个字母代替原来的字母 例如 字母 A 后面第4个字母是 E 用 E 代替 A 因此 China 应译为 Glmre 请编一程序 用赋初值的方法使 cl c2 c3 c
  • IntelliJ IDEA(编码篇):集成Junit4插件,快速生成测试类

    目录 安装JUnitGenerator V2 0 修改JUnitGenerator V2 0的配置 生成JUnit4测试用例 注意 安装JUnitGenerator V2 0 1 通过网络安装 如下 2 手动下载插件安装 插件下载 http
  • 全网最简单解决方式1045-Access denied for user root@localhost(using password:YES)

    最近 Javaweb小学期 和 数据库小学期 答辩 极限赶大作业 唉 1045 Access denied for user root localhost using password YES 连接数据库时出现了这个问题 网上大概有3种解决
  • React Hooks:Effect无限回调踩坑

    场景 我的目的是通过Effect来模拟组件的componentDidMount 在渲染完成之后 通过setTimeout来处理操作 向keyIndex中push一个新的元素 并更新keyIndex 但是这个操作我确定只会执行一次 错误代码如
  • a和ajax跳转页面,ajax 页面跳转

    ajax 页面跳转 内容精选 换一换 面包屑组件 是项目中常用的一种组件 结构大致是 首页 菜单1 菜单2 菜单3 接入配置完成后 伙伴可以在能力开放页面配置伙伴平台回跳地址 以便于客户在完成订单支付后能返回到伙伴销售平台或者客户支付订单需
  • 适合下班后的副业,4个比较实际的副业兼职

    每一个上班族 都有一个发财的梦想 希望可以通过自己的努力 让领导看到自身价值 得到赏识 快速升职加薪 赚得盆满钵满 这样是不错 而且不少上班族单纯依靠工作就实现了这样的梦想 但是对于绝大部分普通人来说 还只存在于 想 如果现有的工作暂时没有
  • pdf注释上锁_如何在iPad上突出显示和注释PDF

    pdf注释上锁 Khamosh Pathak Khamosh Pathak The iPad is a great way to read PDFs but what if you want to highlight parts of it
  • STM32采用普通的IO口来测量PWM的频率

    STM32测量外部输入信号的频率的方法有很多 采用内部定时器输入捕获功能 采用普通的IO口设置外部中断 定时器的当时测量PWM信号的频率 这两种方式比较推荐使用第一种 比较使用内部的资源可以节省CPU资源的利用 当然当内部资源不够使用的时候
  • Unity LensFlares(镜头炫光)踩坑以及解决总结

    镜头光晕 Lens Flares 模拟相机镜头内的折射光线的效果 主要作用就是让太阳光 其他光源更加真实 Build in Build in管线中 可以直接添加Lens Flare组件即可获得效果 URP 2019 在Unity2019版本
  • 【mcuclub】CO2及TVOC检测-SGP30

    一 实物图 二 原理图 编号 名称 功能 1 VCC 电源正 2 GND 电源地 3 SDA 串行地址和数据输入 输出 4 SCL 串行时钟输入 三 简介 SGP30是一款单一芯片上具有多个传感元件的金属氧化物室内气体传感器 内部集成4个气
  • 电赛分几种_参加电赛需要具备哪些知识呢?

    本文转载自 微信公众号 47竞赛 ID gh 1814a7d91c55 经微信公众号授权转载 如需转载与原文作者联系 电赛需要准备哪些知识呢 先分析一下电赛的题目 你会发现 题目主要分为控制类 仪器仪表类 信号源类 电源类 放大器类 高频通
  • QT 布局,控件自适应大小 自动缩放 自动布局

    目录 前言 1 先来说简单的布局控件自适应 说明我们实现了自动布局 3 通过代码设置控件自动缩放重写resizeEvent 4 源码 https upload csdn net creation uploadResources 866208