【Qt】文字换行

目录

    • Qt换行
      • 方式一
      • 方法二
    • 参考文章

在Qt控件中经常遇到文字超出文本框,因此介绍几种换行方式

Qt换行

方式一

QLabel 设置setWordWrap(true);实现换行。但此方法对于多语言文本不太友好,可以在超出文本框时添加省略符,方法如下

//要显示的超长字符串 
QString strDes = "这是一个非常非常非常长的字符串";  
QFontMetrics fontMetrics(ui.label->font()); 
//如果当前字体下,字符串长度大于label宽度
if(fontMetrics.width(strDes) > ui.label->width()) 
{strDes = QFontMetrics(ui.label->font()).elidedText(strDes, Qt::ElideRight, ui.label->width()); 
} 
ui.label->setText(strDes);

方法二

以下是官方解释

QTextLayoutIt offers many features expected from a modern text layout engine, including Unicode compliant rendering, line breaking and handling of cursor positioning. It can also produce and render device independent layout, something that is important for WYSIWYG applications.
The class has a rather low level API and unless you intend to implement your own text rendering for some specialized widget, you probably won’t need to use it directly.
QTextLayout can be used with both plain and rich text.

QTextLayout它提供了现代文本布局引擎所期望的许多功能,包括 Unicode 兼容的渲染、换行和光标定位处理。它还可以生成和渲染与设备无关的布局,这对于所见即所得应用程序非常重要。
该类具有相当低级别的 API,除非您打算为某些专用小部件实现自己的文本渲染,否则您可能不需要直接使用它。
QTextLayout 可用于纯文本和富文本。

int leading = fontMetrics.leading();
qreal height = 0;
textLayout.setCacheEnabled(true);
textLayout.beginLayout();
while (1) {QTextLine line = textLayout.createLine();if (!line.isValid())break;line.setLineWidth(lineWidth);height += leading;line.setPosition(QPointF(0, height));height += line.height();
}
textLayout.endLayout();// draw
QPainter painter(this);
textLayout.draw(&painter, QPoint(0, 0));

参考文章

  1. Qt 5.15 Qt GUI C++ Classes QTextLayout
  2. QPainter再指定区域内绘制文本并自动换行
  3. Qt 字体(03):QFontMetrics类官翻

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

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

相关文章

单片机学习(18)--红外遥控器

红外遥控器 17.1红外遥控的基础知识1.红外遥控简介2.硬件电路3.基本发送和接收4.NEC编码5.遥控器键码6.51单片机的外部中断7.外部中断寄存器 17.2红外遥控的程序代码1.红外遥控(1)工程目录(2)main.c函数(3)…

vue 实战 tab标签页+el-card+流式布局+异步接口调用

<template><div><!-- 布局按钮 --><el-button click"dialogVisible true">布局配置查看</el-button><!-- 布局配置对话框 --><el-dialog :visible.sync"dialogVisible" title"布局配置查看" width"…

Invalid bound statement (not found)

Invalid bound statement (not found) 首先申明的是这个错误一般是使用mybatis方法没有找到或者参数不匹配等原因造成的&#xff01; 原本项目是使用eclipse运行&#xff0c;导入到idea之后&#xff0c;项目启动就报错 …Invalid bound statement (not found)… 解决办法&#…

Python 爬虫(爬取百度翻译的数据)

前言 要保证爬虫的合法性&#xff0c;可以从以下几个方面着手&#xff1a; 遵守网站的使用条款和服务协议&#xff1a;在爬取数据之前&#xff0c;仔细阅读目标网站的相关规定。许多网站会在其 robots.txt 文件中明确说明哪些部分可以爬取&#xff0c;哪些不可以。 例如&…

中电金信:AI数据服务

01 方案简介 AI数据服务解决方案为泛娱乐、电子商务、交通出行等行业提供数据处理、数据分析、AI模型训练等服务&#xff0c;通过自主研发的IDSC自动化数据服务平台与客户业务流程无缝衔接&#xff0c;实现超低延时的实时数据处理支持。 02 应用场景 智能医疗&#xff1a; 通…

深入浅出mediasoup—通信框架

libuv 是一个跨平台的异步事件驱动库&#xff0c;用于构建高性能和可扩展的网络应用程序。mediasoup 基于 libuv 构建了包括管道、信号和 socket 在内的一整套通信框架&#xff0c;具有单线程、事件驱动和异步的典型特征&#xff0c;是构建高性能 WebRTC 流媒体服务器的重要基础…

《javaEE篇》--单例模式详解

目录 单例模式 饿汉模式 懒汉模式 懒汉模式(优化) 指令重排序 总结 单例模式 单例模式属于一种设计模式&#xff0c;设计模式就好比是一种固定代码套路类似于棋谱&#xff0c;是由前人总结并且记录下来我们可以直接使用的代码设计思路。 单例模式就是&#xff0c;在有…

升级python版本

参考 https://blog.51cto.com/u_15579956/10397535 python3 main.py

聚焦保险行业客户经营现状,概述神策数据 CJO 解决方案

触点红利时代&#xff0c;企业的经营需求从「深度的用户行为分析」转变为「个性化、全渠道一致的客户体验」。客户旅程编排&#xff08;Customer Journey Orchestration&#xff0c;简称 CJO&#xff09;从体验出发&#xff0c;关注客户需求、感受和满意度&#xff0c;能够帮助…

HarmonyOS Next系列之地图组件(Map Kit)使用(九)

系列文章目录 HarmonyOS Next 系列之省市区弹窗选择器实现&#xff08;一&#xff09; HarmonyOS Next 系列之验证码输入组件实现&#xff08;二&#xff09; HarmonyOS Next 系列之底部标签栏TabBar实现&#xff08;三&#xff09; HarmonyOS Next 系列之HTTP请求封装和Token…

SpringBoot(事务管理,异步任务,任务调度,整合Mail)

spring自身就集成了许多中间件&#xff0c;可以帮助我们进行日常的开发。 一&#xff1a;Spring Boot中的事务管理 spring事务管理有两种方式 编程式&#xff1a; 即&#xff1a;使用AOP中的切点&#xff0c;切面的知识&#xff0c;利用代理模式对事务进行管理&#xff0c;…

【面试】如果一个NPM包部分功能不满足需求,怎么办

在处理第三方npm包不满足特定需求时&#xff0c;有几种推荐的处理方法。直接修改node_modules中的代码虽然可行&#xff0c;但不推荐&#xff0c;因为这些改动在执行npm install或更新包时会丢失。以下是几种推荐的处理方法&#xff1a; 使用Fork 最常见的方式是Fork源代码。…

「运费速查神器」精明买家必备!一键查询1688供应商发货费用

对于从事跨境买家还是国内电商买家&#xff0c;在选品时&#xff0c;需要全面考虑商品成本&#xff0c;发货费用是供应链成本的重要组成部分。 原来如果我们在1688选品看供应商发货运费&#xff0c;需要一个个单独点击到商品的详情页去查看&#xff0c;再选择具体的收货地、再…

Elastic:监控不同于可观察性的 3 个原因

作者&#xff1a;来自 Elastic Observability Team 监控和可观察性经常互换使用&#xff0c;但它们并不完全相同。监控是可观察性的重要组成部分&#xff0c;但可观察性远远超出了传统监控实践的范围。 关键区别&#xff1a;监控从各个组件收集数据 —— 何时和什么&#xff0…

C/C++文件操作类实现

C文件操作类的实现与应用 在C编程中&#xff0c;文件操作是一项非常重要的任务。本文将介绍一个名为FileOperation的类&#xff0c;它提供了一系列用于文件和文件夹操作的方法&#xff0c;包括遍历文件夹、删除文件、获取指定文件、获取指定后缀的文件、复制文件、移动文件、重…

微信小程序-CANVAS写入图片素材、文字等数据生成图片

微信小程序中&#xff0c;CANVAS写入图片素材、文字等数据生成图片&#xff0c;最终可将生成的 base64 格式图片保存至相册操作 Tips&#xff1a; 1、canvas 标签默认宽度 300px、高度 150px canvas 生成图片时&#xff0c;写入图片素材、文字等数据前&#xff0c;需要根据实…

叶再豪降龙精英课程总结

文章目录 1.思维认知1.1 稻盛和夫成功公式1.2 龙头主升模式1.3 龙头主升-两种路径1.4 股市新手的炒股思路1.5 龙头案例1.6 降龙心法 2.情绪周期2.1 情绪周期2.1 情绪演绎周期2.2 情绪的四个部分2.2.1 指数的情绪周期2.2.3 热点情绪周期2.2.4 热点情绪演绎周期2.2.5 大热点支线2…

1.Vue基础(@事件名+v-show+created+v-bind)

Vue基础 文章目录 Vue基础一.Vue简介1.定义&#xff1a;2.特点&#xff1a;3.建立vue程序步骤 二.Vue的常用指令1.v-text和v-html2.v-show和v-if显示和隐藏数据3.v-on和事件名触发事件4.v-bind设置元素属性5.created页面加载运行的代码块6.v-for7.v-model双向绑定 一.Vue简介 …

深入了解路由器工作原理:从零开始的简单讲解

简介 在现代网络中&#xff0c;路由器扮演着至关重要的角色。它不仅连接了不同的设备&#xff0c;还确保数据能够准确地传输到目的地。本文将带你深入探讨路由器的工作原理&#xff0c;帮助网络基础小白们理解这一重要设备的基本功能。 路由器的构成 路由器是一种具有多个输入…

鸿蒙上的“adb“即hdc常用命令

hdc&#xff08;HarmonyOS Device Connector&#xff09;是为开发人员提供的用于调试的命令行工具&#xff0c;通过该工具可以在windows/linux/mac系统上与真实设备进行交互。 环境准备 hdc工具通过HarmonyOS SDK获取&#xff0c;存放于SDK的toolchains目录下&#xff0c;首次…