PySide6.QtGui.QGlyphRun

class QGlyphRun

QGlyphRun 类提供了对字体内部字形的直接访问。更多

概要

方法

注意

本文档可能包含从C++自动翻译到Python的代码片段。我们始终欢迎对代码片段翻译的贡献。如果您发现翻译问题,您也可以通过在我们的https:/bugreports.qt.io/projects/PYSIDE上创建工单来告知我们。

详细描述

当Qt显示以Unicode编码的文本字符串时,它会首先将Unicode点转换为基于一个或多个字体的字形索引列表和位置列表。在这种情况下,文本的Unicode表示和QFont对象将作为一个方便的抽象,隐藏了在屏幕上显示文本时实际发生的细节。例如,当文本实际到达屏幕时,它可能由一组字体表示,而不仅仅是用户指定的字体,例如在最初选择的字体不支持文本中包含的所有书写系统的情况下。

在某些情况下,作为应用程序开发者,能够对特定字体中的字形绘制到屏幕上进行更底层的控制可能会很有用。例如,在使用外部字体引擎和文本整形器与Qt一起的应用程序中,这种情况可能会出现。QGlyphRun 提供了一个接口,用于获取屏幕上显示文本所需的原始数据。它包含一个字形索引列表、每个字形的位置和一个字体。

用户有责任确保所选字体实际包含提供的字形索引。

glyphRuns()glyphRuns() 可用于将 Unicode 编码的文本转换为 QGlyphRun 对象的列表,而 drawGlyphRun() 可用于绘制字形。

注意

请注意,QRawFont 被认为是构造它的线程本地的。这意味着如果 QGlyphRun 被移动到不同的线程,必须创建并设置一个新的 QRawFont。如果 QGlyphRun 包含来自与当前线程不同的线程的 QRawFont 引用,那么将无法使用 QPainter 绘制字形,因为在这种情况下 QRawFont 被认为是无效且不可访问的。

class GlyphRunFlag

(继承自 enum.Flag) 此枚举描述了可能改变字形运行在视觉布局中的呈现方式或行为的标志。生成字形运行的布局可以根据相关的内部数据设置这些标志,以保留呈现用户预期文本所需的信息。

常量

描述

QGlyphRun.Overline

表示字形应连同上划线一起显示。

QGlyphRun.Underline

表示字形应连同下划线一起显示。

QGlyphRun.StrikeOut

表示字形应被视觉上划掉。

QGlyphRun.RightToLeft

表示字形是从右到左排列的。这可能会影响与字形运行相关的其他屏幕元素的定位,例如内联文本对象。

QGlyphRun.SplitLigature

表示字形运行分割了一个连字字形。这意味着连字字形包含在运行中,但由它表示的字符仅对应于该连字的一部分。在这种情况下,字形运行的boundingRect()函数可用于检索由字形运行表示的字符对应的字形所覆盖的区域。在可视化字形时,需要注意裁剪到此边界矩形,以确保仅绘制连字的相应部分。特别是在从QTextLayout中检索特定字符范围的字形运行时,例如在检索QTextLayout的选定区域时,可能会出现这种情况。

__init__()

构造一个空的 QGlyphRun 对象。

__init__(other)
Parameters:

其他QGlyphRun

构造一个QGlyphRun对象,它是other的副本。

boundingRect()
Return type:

QRectF

返回包含此QGlyphRun中所有字形的最小矩形。如果已经使用setBoundingRect()设置了边界矩形,则将返回该矩形。否则,将根据字形运行中字形的字体度量计算边界矩形。

另请参阅

setBoundingRect()

clear()

清除QGlyphRun对象中的所有数据。

flags()
Return type:

GlyphRunFlag的组合

返回为此QGlyphRun设置的标志。

glyphIndexes()
Return type:

.quint32列表

返回此QGlyphRun对象的字形索引。

isEmpty()
Return type:

布尔

如果QGlyphRun不包含任何字形,则返回true

isRightToLeft()
Return type:

布尔

如果此QGlyphRun包含从右到左绘制的字形,则返回true

另请参阅

setRightToLeft() flags()

__ne__(other)
Parameters:

其他QGlyphRun

Return type:

布尔

other与此QGlyphRun对象进行比较。如果字形索引列表、位置列表或字体有任何不同,则返回true,否则返回false

__eq__(other)
Parameters:

其他QGlyphRun

Return type:

布尔

other与此QGlyphRun对象进行比较。如果字形索引列表、位置列表和字体都相等,则返回true,否则返回false

overline()
Return type:

布尔

如果这个QGlyphRun应该用上划线装饰绘制,则返回true

另请参阅

setOverline() flags()

positions()
Return type:

QPointF的列表

返回这组字形索引中每个字形的基线边缘的位置。

另请参阅

setPositions()

rawFont()
Return type:

QRawFont

返回为此QGlyphRun对象选择的字体。

另请参阅

setRawFont()

setBoundingRect(boundingRect)
Parameters:

boundingRectQRectF

设置此QGlyphRun中字形的边界矩形为boundingRect。除非它为null,否则此矩形将由boundingRect()返回,在这种情况下,将返回字形运行中字形的边界矩形。

注意

除非你在实现文本形状处理,否则你不应该使用这个函数。它特别用于当QGlyphRun应该表示一个比它包含的字形区域更小的区域时。这种情况可能发生,例如,如果通过调用glyphRuns()检索字形运行,并且指定的范围仅包括连字的一部分(其中两个或多个字符组合成一个字形)。在这种情况下,边界矩形应仅包括连字字形的适当部分,基于连字中字符的平均宽度的计算。

为了支持这种情况(一个例子是应该用与主文本颜色不同的颜色绘制的选择),有必要将绘制机制裁剪到从boundingRect()返回的矩形,以避免绘制整个连字字形。

另请参阅

boundingRect()

setFlag(flag[, enabled=true])
Parameters:

如果 enabled 为 true,则 flag 被启用;否则,它被禁用。

另请参阅

flags() setFlags()

setFlags(flags)
Parameters:

flagsGlyphRunFlag 的组合

将此QGlyphRun的标志设置为flags

另请参阅

setFlag() flags()

setGlyphIndexes(glyphIndexes)
Parameters:

glyphIndexes – .quint32的列表

将此QGlyphRun对象的字形索引设置为glyphIndexes。字形索引必须对所选字体有效。

另请参阅

glyphIndexes()

setOverline(overline)
Parameters:

上划线 – 布尔值

表示如果overline为真,则此QGlyphRun应绘制上划线装饰。否则,QGlyphRun应绘制无上划线装饰。

setPositions(positions)
Parameters:

positions – QPointF 的列表

将每个字形索引集中字形的基线边缘位置设置为positions

另请参阅

positions()

setRawData(glyphIndexArray, glyphPositionArray, size)
Parameters:
  • glyphIndexArrayquint32

  • glyphPositionArrayQPointF

  • size – int

设置此QGlyphRun的字形索引和位置,以使用数组glyphIndexArrayglyphPositionArray中的前size个元素。数据不会被复制。调用者必须保证在此QGlyphRun及其任何副本存在期间,数组不会被删除。

setRawFont(rawFont)
Parameters:

rawFontQRawFont

设置用于查找字形索引的字体为指定的rawFont

setRightToLeft(on)
Parameters:

on – 布尔值

表示如果rightToLeft为真,则此QGlyphRun包含应从右到左排序的字形。否则,字形的顺序假定为从左到右。

setSourceString(sourceString)
Parameters:

sourceString – str

将字形运行对应的字符串设置为sourceString。如果设置了,stringIndexes()返回的索引应该是该字符串的索引。

setStrikeOut(strikeOut)
Parameters:

strikeOut – 布尔值

表示如果strikeOut为true,则此QGlyphRun应绘制删除线装饰。否则,QGlyphRun应绘制无删除线装饰。

setStringIndexes(stringIndexes)
Parameters:

stringIndexes – .qsizetype 的列表

将对应于字形索引的字符串索引列表设置为stringIndexes

有关此列表的约定,请参见stringIndexes()了解更多详情。

setUnderline(underline)
Parameters:

下划线 – bool

表示如果underline为真,则此QGlyphRun应使用下划线装饰绘制。否则,QGlyphRun应不使用下划线装饰绘制。

sourceString()
Return type:

字符串

返回与字形运行对应的字符串,如果字形运行是从字符串创建的并且已从布局请求了该字符串。

strikeOut()
Return type:

布尔

如果这个QGlyphRun应该用删除线装饰绘制,则返回true

另请参阅

setStrikeOut() flags()

stringIndexes()
Return type:

.qsizetype 列表

如果字形运行是从字符串构建的,并且从布局中请求了字符串索引,则返回与每个字形索引对应的字符串索引。在这种情况下,返回的向量的长度将与glyphIndexes()的长度相对应。在其他情况下,它将为空。

由于单个字形可能对应源字符串中的多个字符,因此在字符串索引列表中可能存在间隙。例如,如果字符串“first”由包含字符对“fi”连字的字体处理,那么这个五个字符的字符串将生成仅由四个字形组成的字形运行。在这种情况下,字形索引可能是(1, 2, 3, 4)(四个任意的字形索引),而字符串索引将是(0, 2, 3, 4)。字形按照字符串的逻辑顺序排列,因此在这种情况下,第一个字形跨越了字符0和1。

相反,单个字符也可能生成多个字形,在这种情况下,字符串索引列表中会有重复的条目。

字符串索引对应于字符串,可选地通过sourceString()获取。

swap(other)
Parameters:

其他QGlyphRun

将此字形运行实例与 other 交换。此函数非常快且永远不会失败。

underline()
Return type:

布尔

如果这个QGlyphRun应该用下划线装饰绘制,则返回true

另请参阅

setUnderline() flags()