Qt篇——QLabel固定尺寸的情况下让字体大小自适应并自动换行以完整显示

当文字较少时,默认字体大小为16;当文字内容较多时,自动换行并缩小字体。

举例:

字体较少时

字体较多时

思路:

设置自动换行属性 setWordWrap;通过QFontMetrics计算文字字体要多大、显示多少行才不会超过Label的尺寸从而完整显示,然后在每行文字的末尾添加空格让自动换行能够拆分你的字符串。

代码:

void MainFrame::fixedWrapLabel(QLabel *label, QString text) {QFont font = label->font();QFontMetrics metrics(font);//99999是字体最大数量, 利用QFontMetrics计算出文字的理论宽高QString elidedText = metrics.elidedText(text, Qt::ElideNone, 99999);//要把label的margin考虑进去int margin = label->margin();//设置自动换行label->setWordWrap(true);int pointSize = font.pointSize();int row = 1;//如果字体的总长度除以行数比label尺寸宽,则继续缩小字体while (metrics.width(elidedText) * 1.0 / row > (label->width() - margin * 2)&& pointSize > 0) {//计算缩小字体后的文字高度和label的高度的比例,得出当前应该换多少行//我这里最多只用了3行,根据你的实际情况可以不限制最多行数if (metrics.height() < (label->height() - margin * 2) / 3.0) {row = 3;} else if (metrics.height() < (label->height() - margin * 2) / 2.0) {row = 2;}//缩小字体并设置给QFontMetrics font.setPointSize(pointSize--);metrics = QFontMetrics(font);elidedText = metrics.elidedText(text, Qt::ElideNone, label->width());}int rowSize = elidedText.size() / row;//这里很关键,因为QLabel的setWordWrap自动换行不会分割字符和字母//所以我们要根据我们计算出来的行数,在每行末尾添加空格,QLabel换行会根据空格进行拆分换行for (int i = 1; i < row; i++) {elidedText.insert(rowSize * i + 1, " ");}//设置字体label->setFont(font);//显示添加空格来换行的最终文本label->setText(elidedText);
}

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

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

相关文章

做外贸干一行爱一行,还是干一行厌一行?

记得年轻的时候&#xff0c;每每和同龄人不同行业聊天的时候&#xff0c;大家普遍的感觉就是&#xff1a;自己这一行太苦了&#xff0c;以后有孩子了干什么都不能让他做自己这一行。 和在银行上班的同学聊天&#xff0c;他们最大的苦恼是需要每天开发客户&#xff0c; 让客户在…

【0295】Posgres内核 dynahash table 之 hash_search 实现原理(2)

相关文章: 【0294】Postgres内核 dynahash 之 hash_search 实现原理(1) 0. 前言 在【0294】Postgres内核 dynahash 之 hash_search 实现原理(1) 一文中,从Postgres内核源码角度详细讲解了dynamic hash table中 hash search 的实现原理。 具体内容: 如何确定segment位置…

8、开发与大模型对话的独立语音设备

一、设计原理 该系统的核心部分主要由ESP32-WROVER开发板和ESP32-CAM摄像头、MAX9814麦克风放大器模块、MAX98357功放、声音传感器和SU-03T语音识别芯片构成。通过使用ESP32-WROVER开发板,用户可以实现通过语音与ai进行交互并进行人脸识别。 系统中,从外部输入电源中获取电源…

一手洞悉泰国slot线上游戏投放本土网盟CPI计费广告优势

一手洞悉泰国slot线上游戏投放本土网盟CPI计费广告优势 ​在泰国这个拥有独特文化背景和审美观念的国家&#xff0c;Slots游戏以其丰富的玩法和刺激的体验迅速赢得了玩家们的喜爱。然而&#xff0c;要在竞争激烈的市场中脱颖而出&#xff0c;有效的推广策略显得尤为重要。本土…

HTTP有哪些失败原因?怎么处理?

在网络通信中&#xff0c;HTTP&#xff08;超文本传输协议&#xff09;是最常用的协议之一&#xff0c;它支持万维网上的数据交换。然而&#xff0c;在使用HTTP进行数据传输时&#xff0c;可能会遇到各种失败的情况。本文将探讨HTTP请求失败的常见原因&#xff0c;并提供相应的…

【Excel操作】Python Pandas判断Excel单元格中数值是否为空

判断Excel单元格中数值是为空&#xff0c;主要有下面两种方法&#xff1a; 1. pandas.isnull 2. pandas.isna判断Excel不为空&#xff0c;也有下面两种方法&#xff1a; 1. pandas.notna 2. pandas.notnull假设有这样一张Excel的表格 我们来识别出为空的单元格 import panda…

Python酷库之旅-第三方库Pandas(010)

目录 一、用法精讲 22、pandas.read_hdf函数 22-1、语法 22-2、参数 22-3、功能 22-4、返回值 22-5、说明 22-6、用法 22-6-1、数据准备 22-6-2、代码示例 22-6-3、结果输出 23、pandas.HDFStore.put方法 23-1、语法 23-2、参数 23-3、功能 23-4、返回值 23-5…

【Linux】线程(轻量级进程)

目录 一、线程概念 二、线程特性 2.1 进程更加轻量化 2.2 线程的优点 2.3 线程的缺点 2.4 线程的异常 2.5 线程用途 三、进程和线程 四、线程控制 4.1 包含线程的编译链接 4.2 创建线程 4.3 获得线程自身的ID 4.4 线程终止 4.5 线程等待 4.6 线程分离 4.6 线程…

SpringBoot实现Read Through模式

简介 Read Through模式通常是指一种缓存策略&#xff0c;其中当应用程序尝试读取数据时&#xff0c;缓存系统首先被检查以查看数据是否已经存在于缓存中。如果缓存中存在数据&#xff08;即缓存命中&#xff09;&#xff0c;则直接从缓存中读取数据并返回给应用程序。如果缓存…

使用Java构建可靠的分布式缓存系统

使用Java构建可靠的分布式缓存系统 大家好&#xff0c;我是微赚淘客系统3.0的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01; 1. 分布式缓存系统概述 在现代软件架构中&#xff0c;分布式缓存系统扮演着至关重要的角色&#xff0c;它能够显…

恢复出厂设置后如何从 iPhone 恢复数据

在 iPhone 恢复出厂设置后&#xff0c;所有数据都会被删除&#xff0c;并且 iPhone 将恢复到原始出厂设置&#xff0c;这意味着您的所有 iPhone 数据&#xff0c;包括照片、视频、联系人和应用程序都将消失。 幸运的是&#xff0c;如果您有备份可以恢复&#xff0c;这并不一定…

Leetcode 3208. Alternating Groups II

Leetcode 3208. Alternating Groups II 1. 解题思路2. 代码实现 题目链接&#xff1a;3208. Alternating Groups II 1. 解题思路 这一题同样只需要想明白问题的核心就行了&#xff0c;这道题的核心就在于说找到所有的交替不同的最大字串&#xff0c;假设其长度为n&#xff0…

处理训练和验证数据集

&#x1f4da;博客主页&#xff1a;knighthood2001 ✨公众号&#xff1a;认知up吧 &#xff08;目前正在带领大家一起提升认知&#xff0c;感兴趣可以来围观一下&#xff09; &#x1f383;知识星球&#xff1a;【认知up吧|成长|副业】介绍 ❤️如遇文章付费&#xff0c;可先看…

名企面试必问30题(二十五)—— 你手上还有没有其他的offer?

1.思路 主要考察你的意向度、时长竞争力和薪资空间&#xff0c;如果回答有offer&#xff0c;需要准备面试官追问还在考虑的原因。 2.参考解答 方式一&#xff1a; “目前我还没有其他的 offer。我一直非常专注于寻找真正适合我&#xff0c;并且能让我充分发挥自身能力和潜力的工…

spring boot(学习笔记第十二课)

spring boot(学习笔记第十二课) Spring Security内存认证&#xff0c;自定义认证表单 学习内容&#xff1a; Spring Security内存认证自定义认证表单 1. Spring Security内存认证 首先开始最简单的模式&#xff0c;内存认证。 加入spring security的依赖。<dependency>…

JDBC的基本认识

前提 在了解和学习JDBC之前&#xff0c;大家 已经学习过 java语言 和数据库的基本知识了&#xff0c;今天这篇博客的核心&#xff0c;就是告诉大家 &#xff0c;jdbc 是连接java编译器和数据库&#xff0c;是使用java对数据库进行操作的。 正文 JDBC简介 概念 JDBC的本质 1…

【软件分享】气象绘图软件Panoply

气象是大气中的物理现象&#xff0c;气象要素则是表明大气物理状况的要素&#xff0c;主要的气象要素有降水、风、气压、湿度等。为了研究气象要素在空间上的分布和运动状况&#xff0c;我们需要对气象要素进行空间上进行可视化&#xff0c;这个时候就需要气象领域的一些的绘图…

机械设计师转大模型岗位,我是抓住风口的猪,真能起飞!

大模型&#xff08;如人工智能、机器学习和深度学习模型&#xff09;可以通过提供先进的模拟、优化和自动化工具来赋能机械设计师。这些工具可以帮助机械设计师更高效地完成设计任务&#xff0c;优化产品设计&#xff0c;并提高创新速度。以下是机械设计师如何转行大模型&#…

java算法day8

实现 strStr() 459.重复的子字符串 实现strStr() 可以说是暴力解。但是里面的处理比一开始自己写的冗余逻辑要好 class Solution {public int strStr(String haystack, String needle) {char[] strh haystack.toCharArray();char[] strn needle.toCharArray();//优化1.没必…

Monaco 多行提示的实现方式

AI 代码助手最近太火爆&#xff0c;国内有模型厂商都有代码助手&#xff0c;代码助手是个比较典型的 AI 应用&#xff0c;主要看前端&#xff0c;后端的模型都差不多&#xff0c;国内外都有专门的代码模型。现在都是集中在 VSCode 和 Idea的插件&#xff0c;本文通过 Monaco 实…