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

Qt 界面上字体自适应控件大小 - 随控件缩放

Qt 界面上字体自适应控件大小 - 随控件缩放

  • 引言
  • 一、设计思路
  • 二、进阶版大致思路
  • 三、参考链接

引言

在这里插入图片描述

Qt控件自适应字体大小可以用adjustSize()函数,但字体自适应控件大小并没有现成的函数可调. - 本文实现了按钮上的字体随按钮大小变化而变化 (如上图所示) - 其他控件同理。

  • 核心思路:根据控件的大小变化,同步调整字体的大小 - 重写resizeEvent函数

一、设计思路

本意是字体随按钮变化,实际上实现的是字体随窗体变化,由于按钮也随窗体变化,可以说是近似等价的实现 - 想变成随按钮变化也简单,将窗体高和宽换成按钮的即可:

    1. 在头文件声明高、宽和字体大小,并在构造函数中初始化 (记录,以便后续对比)
    this->width = this->size().width();this->height = this->size().height();this->fontsize = ui->pushButton->font().pointSize();
    1. 在窗体resizeEvent函数中,对比窗体高和宽的变化率,按照最小的变化率 (保证字体显示完整) 来控制字体大小。
void Widget::resizeEvent(QResizeEvent *event)
{int w = event->size().width();int h = event->size().height();double scale = 1.0;scale = 1.0 * w/this->width;if(scale < 1.0 * h/this->height){scale = 1.0 * h/this->height;}QFont font = ui->pushButton->font();int new_fontsize = scale * this->fontsize;if(new_fontsize != ui->pushButton->font().pointSize()){font.setPointSize(new_fontsize);ui->pushButton->setFont(font);qDebug()<< this->fontsize << " " << new_fontsize;}
}

二、进阶版大致思路

    1. 继承现有控件,重写每一个控件的resizeEvent函数,实现字体大小变换
      各个控件需保存自己的原始的大小和字体大小信息,根据原始信息和resize后的信息调整字体。 – 略繁琐,通用性较差
    1. 写一个函数或类 (推荐类,方便存储原始数据),遍历界面上的控件 (或将需要调整字体的控件提前加入类中的一个list中,在父窗体上resizeEvent函数中遍历list,调整其中控件字体大小即可)。-- 通用性强,较难实现

已经有大佬写了工具:QT界面自适应:https://blog.csdn.net/qq_45280097/article/details/134738567

三、参考链接

Qt 控件自适应字体大小:https://blog.csdn.net/lxj362343/article/details/108245226
Qt学习之路——字体跟随控件自适应(笔记):https://blog.csdn.net/qq_39020917/article/details/131911691
Qt Windows高清DPI自适应分辨率缩放,比较完美的解决方案:https://blog.csdn.net/startl/article/details/105862817

http://www.lryc.cn/news/354185.html

相关文章:

  • 【Python】 使用SMOTE解决数据不平衡问题
  • Redis第18讲——Redis和Redission实现延迟消息
  • 返回枚举类给前端
  • A. Maximize?
  • RBAC 动态权限
  • c语言:模拟strlen(三种方法)最全版本
  • 线性模型--普通最小二乘法
  • 移动云以深度融合之服务,令“大”智慧贯穿云端
  • 簡述vue常用指令
  • 【建议收藏】用AI快速生成一个网页(名侦探柯南~灰原哀主题网页),适合大学生web期末大作业
  • 用c++用4个凸函数(觉得啥好用用啥)去测试adam,rmsprop,adagrad算法的性能(谁先找到最优点)
  • AJAX初级
  • 重载大于号运算符,比较复数大小
  • go ast语义分析实现指标计算器
  • 【Vue】组件间传参与方法调用
  • 类和对象2
  • Linux系统命令traceroute详解(语法、选项、原理和实例)
  • 中兴通讯助力中国移动,推动SPN AI节能技术于23省规模部署
  • SQL Server--死锁
  • 中科蓝讯AB32VG1中文寄存器说明GPIO端口操作
  • 如何查看热门GPT应用?
  • C++中的各种定义
  • Java面向对象-常用类(日期时间类)
  • Shell环境变量深入:自定义系统环境变量
  • 【C++课程学习】:命名空间的理解(图文详解)
  • 鸿蒙ArkUI-X平台差异化:【运行态差异化(@ohos.deviceInfo)】
  • 蓝牙Mesh模块组网时无线回程影响速率吗?
  • 将3D检测的box框投影到BEV图片上
  • Flutter 中的 ClipOval 小部件:全面指南
  • ubuntu 硬盘转移