QTextLine、QGlyphRun、QTextLayout

news2024/11/16 23:51:02

QGlyphRun

一、描述

此类提供对字体中内部字形的直接访问。在某些情况下,开发人员可以对特定字体中的字形绘制到屏幕上进行更低级的控制。

当Qt显示以Unicode编码的文本字符串时,它会将Unicode点转换为基于字体的字形索引列表和位置列表。QGlyphRun 提供了一个接口,用于获取屏幕上的文本所需的原始数据。它包含字形索引列表、每个字形的位置和字体。

QTextLayout::glyphRuns()、QTextFragment::glglyphRun() 可用于将unicode编码的文本转换为QGlyphRun 对象列表,QPainter::drawGlyphRun() 可用来绘制glyph。

二、类型成员

1、enum QGlyphRun::GlyphRunFlag:此枚举的标志可以改变字形运行在视觉布局中的呈现方式或行为。

  • Overline:字形显示上划线。
  • Underline:字形显示下划线。
  • StrikeOut:字形显示删除线。
  • RightToLeft:字形从右到左排序。
  • SplitLigure:字形拆分连字标志符号。

三、成员函数

略。


QTextLine

一、描述

此类表示 QTextLayout 中的一行文本。此类对象通常由 QTextLayout::createLine()创建。

二、部分成员函数

1、qreal ascent()

     qreal descent()

     qreal height()

     qreal width()

     qreal x()

     qreal y()

     qreal leading()

如下图。

     QRectF rect()

文本的边界矩形。

    void setLeadingIncluded(bool included)

设置 height 是否包括 leading,默认为 false。leading 为负则被忽略。 

     qreal cursorToX(int *cursorPos, QTextLine::Edge edge = Leading)

     qreal cursorToX(int cursorPos, QTextLine::Edge edge = Leading)

将位置 cursorPos 转换为文本行范围内相应的x轴位置,但不会超出文本边界矩形。

     int xToCursor(qreal pos, QTextLine::CursorPosition cpos = CursorBetweenCharacters)

将文本行上x坐标pos转换为最近的匹配光标位置。

2、void draw(QPainter *painter, const QPointF &position)

在 position 上使用 painter 上绘制一行文本。

3、QList<QGlyphRun> glyphRuns(int from = -1, int length = -1)

返回由 from 和 length 定义的范围内的字符的所有字形索引和位置。

from 索引相对于包含 QTextLayout 的文本的开头,范围必须在函数 textStart() 和 textLength() 确定的 QTextLine 范围内。

如果 from 为负,则默认为 textStart(),如果 length 为负,则默认为 textLength()。

4、qreal horizontalAdvance()

返回一个水平距离:从其位置到下一个自然绘制文本的位置的距离。

可以使用它并排放置两行文本:将第二行文本的位置设置为第一行文本的此值。

5、bool isValid()

是否有效。

6、int lineNumber()

当前行在文本引擎中的位置,是第几行。

7、QRectF naturalTextRect()

返回行内文本所覆盖的矩形。与 rect() 相比,返回的是文本实际占用的矩形。

8、qreal naturalTextWidth()

返回文本所占行的宽度。与 width() 的关系与上面类似。

9、void setLineWidth(qreal width)

设置文本行的宽度。该行从其起始位置开始填充尽可能多的字符。

10、void setNumColumns(int numColumns)

设置文本行从其起始位置开始填充的字符数。如果文本不能拆分到 numColumns 个字符,则该行将被填充到下一个空格或文本末尾。

例如:设置40可足够填充2字符:

再设置每个文本行只填充1字符:

11、void setPosition(const QPointF &pos)

文本开始的位置。

12、int textLength()

文本行中字符个数。

13、int textStart()

当前文本行的开头的字符是 QTextLayout 字符串的第几个字符。


QTextLayout

一、描述

QTextLayout类用于布置和渲染文本,可用于纯文本和富文本。它提供了Unicode兼容的渲染、换行和光标定位处理等功能。

二、部分成员函数

1、void beginLayout() / void endLayout()

开始布局过程。

2、QRectF boundingRect()

包含布局中所有文本行的最小矩形。

3、void clearLayout()

清除布局中的文本行信息。这将使布局无效。

4、QTextLine createLine()

如果布局中有要插入的文本,则返回要布局的新文本行,否则返回无效的文本行。

5、void draw(QPainter *p, const QPointF &pos, const QList<QTextLayout::FormatRange> &selections = QList<FormatRange>(), const QRectF &clip = QRectF())

在pos指定的位置绘制整个布局。渲染的布局被剪裁在 clip 指定的矩形内。

6、void drawCursor(QPainter *painter, const QPointF &position, int cursorPosition, int width)

     void drawCursor(QPainter *painter, const QPointF &position, int cursorPosition)

在给定位置绘制文本光标。文本中的相应位置由 cursorPosition 指定。

7、QList<QGlyphRun> glyphRuns(int from = -1, int length = -1)

返回与此文本布局中从位置 from 开始的 length 个字符相对应的所有字形的字形索引和位置。

这是一个昂贵的函数,不应在时间敏感的上下文中调用。

如果 from 小于零,则将从布局中的第一个字符开始。如果 length 小于零,则将从开始位置开始跨越整个字符串。

8、bool isValidCursorPosition(int pos)

位置pos是否有效的光标位置。在Unicode上下文中,文本中的某些位置不是有效的光标位置。

9、QTextLine lineAt(int i)

文本布局中的第 i 个文本行。

10、int lineCount()

此文本布局中的文本行数。

11、QTextLine lineForTextPosition(int pos)

返回包含光标位置 pos 的文本行。

12、qreal maximumWidth()

布局可以扩展到的最大宽度,基本上是整个文本的宽度。此函数仅在完成布局后返回有效值。

      qreal minimumWidth()

布局所需的最小宽度。这是布局的最小不可分割子字符串的宽度。此函数仅在完成布局后返回有效值。

13、int preeditAreaPosition()

返回编辑前即将处理的文本布局中区域的位置。

      QString preeditAreaText()

返回编辑前插入到布局中的文本。

14、void setCacheEnabled(bool enable)

是否启用完整布局信息的缓存。QTextLayout 默认在调用 endLayou() 后会丢弃大部分布局信息,以减少内存消耗。但是,如果想在之后直接绘制布局文本,启用缓存可能会大大加快绘制速度。

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

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

相关文章

企业对于源代码加密需求分析

需求 随着企业信息化发展的日益增长&#xff0c;软件行业厂商之间的竞争也愈加白热化&#xff0c;加上国内对知识产权的不够重视、山寨模仿产品的横行。保护源代码、保证企业的核心竞争力&#xff0c;成为众多软件研发企业的第一要务。那么企业应该如何保证源代码的安全呢&…

[附源码]计算机毕业设计常见Web漏洞对应PC应用系统Springboot程序

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

HTTP缓存机制(Cache-Control)

文章目录HTTP缓存机制HTTP缓存机制 HTTP 协议通常应用于分布式信息系统&#xff0c;所谓分布式信息系统&#xff0c;是指以计算机网络为基础&#xff0c;将系统的数据与功能分别布置在不同的地方&#xff0c;然后再通过网络将数据与功能连接的信息系统。由于系统需要处理大量的…

世界杯期间我使用Python生成二维码“为中国队辟谣”

二维码介绍 二维码本质上&#xff0c;就是一段字符串&#xff0c;我们可以把任意字符串&#xff0c;制作成一个二维码图片。在生活中&#xff0c;使用二维码更多的是一个URL&#xff08;网址&#xff09;。 引入 qrcode库 qrocde库网址&#xff1a;qrcode PyPI 进入网址之后…

[附源码]计算机毕业设计贷款申请审核管理系统论文Springboot程序

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

本地字节序与网络字节序的相互转换(IP地址、端口号)

一般数据在内存中是按照字节存储的&#xff0c;存储的方式分为大端和小端。在不知道对方主机的存储方式的情况下&#xff0c;我们不知道是否需要转换数据的存储方式。因此&#xff0c;TCP/IP协议规定&#xff1a;发送到网络的数据流应采用大端字节序&#xff01; 如果当前主机…

年产3000吨原味奶糖生产车间工艺设计

目 录 摘 要 I Abstract II 1绪论 1 1.1原味奶糖的概念及其功能特性 1 1.2国外原味奶糖的现状 3 1.3我国的原味奶糖现状及开发前景 4 1.4原味奶糖原料的生产情况 4 2工艺流程设计 6 2.1 原味奶糖的生产工艺 6 2.1.1 溶糖与混合 7 2.1.2 连续真空薄膜熬糖 7 2.1.3 混合 8 2.1.4 …

阿里国际站-唤端技术的探索与演进

作者&#xff1a;黄昭 阿里ICBU买家增长技术团队 近几年用户增长领域APP推广发展迅猛&#xff0c;而唤端就是其中的重要技术。通过唤端拉新/促活不仅能能够将三方流量规模做大&#xff0c;同时二方流量也能有效利用&#xff0c;给网站不断带来商机&#xff0c;本文将为大家详细…

UE4虚幻引擎关于事件分发器的使用!

UE4虚幻引擎关于事件分发器的使用&#xff01; 首先&#xff0c;这次就讲一下&#xff0c;事件分发器&#xff0c;在UI&#xff0c;Pawn&#xff0c;子actor如何进行事件传递&#xff01; 首先&#xff01;我们如果要使用事件分发器的原因是什么&#xff01; 第一&#xff0…

Django(11):后台管理系统

目录后台管理系统基本操作管理平台的基本操作数据模型的注册和管理数据模型管理后台管理系统操作Xadmin管理平台Django内置了自己的后台管理系统&#xff0c;包含数据库管理和良好的界面。后台管理系统基本操作 在我们前面创建Django项目时&#xff0c;默认会有许多应用组件&a…

一次nginx “time out”故障排查

研发请求协助排查一个nginx故障。 描述如下&#xff1a; 在内部环境测试没问题。 打包到生产环境后&#xff0c;访问nginx接口地址超时。 研发比对后怀疑是nginx版本不一致导致。内部版本1.23.2&#xff0c;生产环境1.23.1. 收到信息第一感觉不是nginx的问题。不过先测试一…

五年测试经验,从二线到一线,下定决心一定要转自动化测试

一七年毕业以来自己工作也快三年左右了&#xff0c;自己最开始其实是想找java开发的&#xff0c;大学的毕设也是用jsp写的一个简单的web网站&#xff0c;无奈面试总被刷而且遇到了大量的培训机构。于是乎就转入软件测试这个行业。没想到啊转眼间一干就三年多了。 第一家公司 …

基于风驱动算法优化的lssvm回归预测-附代码

基于风驱动算法优化的lssvm回归预测 - 附代码 文章目录基于风驱动算法优化的lssvm回归预测 - 附代码1.数据集2.lssvm模型3.基于风驱动算法优化的LSSVM4.测试结果5.Matlab代码摘要&#xff1a;为了提高最小二乘支持向量机&#xff08;lssvm&#xff09;的回归预测准确率&#xf…

物联网开发笔记(57)- 使用Micropython开发ESP32开发板之控制ESP32-CAM摄像头

一、目的 这一节我们学习如何使用我们的ESP32开发板来控制ESP32-CAM摄像头。 二、环境 ESP32 ESP32-CAM摄像头 Thonny IDE 几根杜邦线 ESP32-CAM是一个开发板&#xff0c;它上面集成了Camera摄像头模块&#xff0c;可以直接用Micropython进行操作。从MicroPython官网下载的固…

语音处理的线性预测

线性预测是几乎所有现代语音编码算法的基础 – 手机 – 网络电话 (VOIP) – 军事通讯 线性预测假设语音信号的每个样本都可以从 P 个先前样本的加权和中预测出来&#xff0c;利用平稳性假设产生的冗余&#xff0c;线性预测允许数百个样本的语音帧仅由 10-15 个“预测系数”(a1 …

Java搭建宝塔部署实战毕设项目基于SSM的房间管理系统源码

大家好啊&#xff0c;我是测评君&#xff0c;欢迎来到web测评。 本期给大家带来一套Java开发的毕设项目SSM房间管理系统源码&#xff0c;可以拿来做毕业设计&#xff0c;或者在这基础上进行二开&#xff0c;感兴趣的朋友自行下载来学习一下&#xff0c;本期把这套系统分享给大家…

华人运通与BlackBerry达成合作, 打造未来数字生命GT——高合HiPhi Z

BlackBerry近日宣布&#xff0c;中国领先的未来智能交通产业的创新型出行科技公司——华人运通&#xff0c;选择了BlackBerry QNX为华人运通的第二款旗舰车型高合HiPhi Z保驾护航&#xff0c;打造其自动驾驶域控制器与数字座舱域控制器。 基于BlackBerry QNX Neutrino 实时操作…

Servlet:狂神实例源码分析

目录servlet源码&#xff1a;servlet01启动测试总结servlet 上面就是一个web项目的典型目录&#xff0c;servlet处理request和response的逻辑web.xml管理路由信息index.jsp作为首页访问的页面&#xff0c;jsp是java server page可以认为用java和html混合写前端 源码&#xff1…

汽车电子之功能安全产品设计过程

汽车电子之功能安全产品设计过程 内容来自 驱动视界 学习为主。 1.概念阶段 2.系统阶段 3.硬件层面 4.软件层面 5.3“V” 6.大追溯关系 随着电动化、智能化的发展&#xff0c;越来越多的汽车配备了电子电气系统&#xff0c;如电传动系统、助力转向系统、自动驾驶系统等&…

数据库日常实操优质文章分享(含Oracle、MySQL等) | 11月刊

墨天轮社区正持续举办【聊聊故障处理那些事儿】DBA专题征文活动中&#xff0c;每月进行评优发奖&#xff0c;鼓励大家记录工作中遇到的数据库故障处理过程&#xff0c;不仅用于自我复盘与分析&#xff0c;同时也能帮助其他的同仁们避坑。 这里为大家整理出了11月的13篇优质文章…