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

【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类官翻

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 【Zoom 】超全!!!Zoom收藏这一篇足矣!!Zoom视频会议软件:全面解析与高效使用指南 (全文近1W字)
  • 无人机10公里WiFi图传摄像模组,飞睿智能超清远距离无线监控,智能安防新潮流
  • 《python程序语言设计》第6章15题财务应用程序:打印税款表。利用程序清单4-7的代码
  • 安宝特方案|解放双手,解决死角,AR带来质量监督新体验
  • Spring Boot:图书管理系统(一)
  • 已解决:vue-office/excel 多个sheet点击切换,滚动条高度不重置,表格视图位置不正确
  • 文件包含漏洞--pyload
  • 生物学家做不出 AlphaGO,但也在创造生命……
  • 学习笔记-系统框图传递函数公式推导
  • pinia安装及简介
  • AI学习记录 -使用react开发一个网页,对接chatgpt接口,附带一些英语的学习prompt
  • 在vue中优雅地异步引入(懒加载)腾讯地图API
  • tinyxml2的入门教程
  • 【进阶篇-Day12:JAVA中stream流、File类的介绍】
  • python每日学习:numpy库的用法(上)
  • Java 23种设计模式 之单例模式 7种实现方式
  • Java读取Properties文件的六种方法
  • opencv python Meanshift 和 Camshift
  • PHP 7 修改了什么呢 -- 2
  • TCP拥塞控制
  • 不用申请服务号就可以开发微信支付/支付宝/QQ钱包支付!附:直接可用的代码+demo...
  • 从零开始学习部署
  • 关于Android中设置闹钟的相对比较完善的解决方案
  • 深入 Nginx 之配置篇
  • 使用agvtool更改app version/build
  • 推荐一款sublime text 3 支持JSX和es201x 代码格式化的插件
  • 在electron中实现跨域请求,无需更改服务器端设置
  • 智能网联汽车信息安全
  • 中文输入法与React文本输入框的问题与解决方案
  • 《天龙八部3D》Unity技术方案揭秘
  • HanLP分词命名实体提取详解
  • 如何在招聘中考核.NET架构师
  • 直播平台建设千万不要忘记流媒体服务器的存在 ...
  • # 飞书APP集成平台-数字化落地
  • ### RabbitMQ五种工作模式:
  • #ifdef 的技巧用法
  • (0)Nginx 功能特性
  • (23)Linux的软硬连接
  • (8)Linux使用C语言读取proc/stat等cpu使用数据
  • (libusb) usb口自动刷新
  • (Redis使用系列) SpringBoot中Redis的RedisConfig 二
  • (笔记)M1使用hombrew安装qemu
  • (二) Windows 下 Sublime Text 3 安装离线插件 Anaconda
  • (附源码)ssm高校志愿者服务系统 毕业设计 011648
  • (使用vite搭建vue3项目(vite + vue3 + vue router + pinia + element plus))
  • (学习总结16)C++模版2
  • (转)http协议
  • ***监测系统的构建(chkrootkit )
  • .Net Core/.Net6/.Net8 ,启动配置/Program.cs 配置
  • .Net 代码性能 - (1)
  • .Net 基于MiniExcel的导入功能接口示例
  • .net 生成二级域名
  • .Net(C#)自定义WinForm控件之小结篇
  • .NET6实现破解Modbus poll点表配置文件
  • .net6使用Sejil可视化日志