QGlyphRun 类

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

头文件 #include <QGlyphRun>
CMakefind_package(Qt6 REQUIRED COMPONENTS Gui)
target_link_libraries(mytarget PRIVATE Qt6::Gui)
qmakeQT += gui

公共类型

枚举GlyphRunFlag { Overline, Underline, StrikeOut, RightToLeft, SplitLigature }
flagsGlyphRunFlags

公共函数

QGlyphRun()
QGlyphRun(const QGlyphRun &other)
~QGlyphRun()
QRectFboundingRect() const
voidclear()
QGlyphRun::GlyphRunFlagsflags() const
QList<quint32>glyphIndexes() const
boolisEmpty() const
boolisRightToLeft() const
booloverline() const
QList<QPointF>positions() const
QRawFontrawFont() const
voidsetBoundingRect(const QRectF &boundingRect)
voidsetFlag(QGlyphRun::GlyphRunFlag flag, bool enabled = true)
voidsetFlags(QGlyphRun::GlyphRunFlags flags)
voidsetGlyphIndexes(const QList<quint32> &glyphIndexes)
voidsetOverline(bool overline)
voidsetPositions(const QList<QPointF> &positions)
voidsetRawData(const quint32 *glyphIndexArray, const QPointF *glyphPositionArray, int size)
voidsetRawFont(const QRawFont &rawFont)
voidsetRightToLeft(bool rightToLeft)
(since 6.5) voidsetSourceString(const QString &sourceString)
voidsetStrikeOut(bool strikeOut)
(since 6.5) voidsetStringIndexes(const QList<qsizetype> &stringIndexes)
voidsetUnderline(bool underline)
(since 6.5) QStringsourceString() const
boolstrikeOut() const
(since 6.5) QList<qsizetype>stringIndexes() const
voidswap(QGlyphRun &other)
boolunderline() const
booloperator!=(const QGlyphRun &other) const
QGlyphRun &operator=(const QGlyphRun &other)
booloperator==(const QGlyphRun &other) const

详细说明

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

在某种情况下,对于应用程序开发者来说,能够更细粒度地控制特定字体中的哪些字形被绘制到屏幕上可能很有用。这可能是使用外部字体引擎与 Qt 一起使用的应用程序的例子。QGlyphRun 提供了获取屏幕上文本所需原始数据的一个接口。它包含一个字形索引列表,每个字形的定位和字体。

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

可以使用 QTextLayout::glyphRuns() 或 QTextFragment::glyphRuns() 将 Unicode 编码的文本转换为 QGlyphRun 对象的列表,并使用 QPainter::drawGlyphRun() 来绘制字形。

注意:请注意,QRawFont 被认为是构建它的线程本地的。这意味着如果将其移动到不同的线程,则需要创建和设置一个新的 QRawFont。如果 QGlyphRun 包含来自不同线程的 QRawFont 的引用,则无法使用 QPainter 绘制字形,因为在这种情况下,QRawFont 被视为无效且不可访问。

成员类型文档

枚举 QGlyphRun::GlyphRunFlag
标志 QGlyphRun::GlyphRunFlags

这个枚举描述了改变字形运行在视觉布局中呈现方式或行为的标志。生成字形运行的布局可以根据相关内部数据设置这些标志,以保留用户需要按其意图呈现文本所需的信息。

常量描述
QGlyphRun::Overline0x01指示字形应与上划线一起可视化。
QGlyphRun::Underline0x02指示字形应与下划线一起可视化。
QGlyphRun::StrikeOut0x04指示字形应在视觉上被勾销。
QGlyphRun::RightToLeft0x08指示字形是从右向左排序的。这可能影响其他屏幕元素的位置,例如相对字形运行的行内文本对象。
QGlyphRun::SplitLigature0x10指示字形运行分割了连字符字形。这意味着连字符字形包含在运行中,但由它表示的字符仅对应于该连字符的部分。在这种情况下,可以使用字形运行的 boundingRect() 函数来检索由字形运行表示的字符对应的字形所覆盖的区域。在可视化字形时,需要注意按照此边界矩形进行裁剪,以确保只绘制连字符对应的部分。特别是在从 QTextLayout 中检索特定字符范围(例如,检索 QTextLayout 的选中区域)的字形运行时,可能需要这样做。

QGlyphRunFlags 类型是 QFlags<GlyphRunFlag> 的 typedef,它存储了 GlyphRunFlag 值的组合。

成员函数文档

QGlyphRun::QGlyphRun()

构造一个空的 QGlyphRun 对象。

QGlyphRun::QGlyphRun(const QGlyphRun &other)

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

[noexcept] QGlyphRun::~QGlyphRun()

销毁 QGlyphRun。

QRectF QGlyphRun::boundingRect() const

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

请参阅setBoundingRect()。

void QGlyphRun::clear()

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

QGlyphRun::GlyphRunFlags QGlyphRun::flags() const

返回为当前 QGlyphRun 设置的标志。

请参阅setFlags(),setFlag() 和 setFlag()。

QList<quint32> QGlyphRun::glyphIndexes() const

返回 QGlyphRun 对象的字形索引。

请参阅setGlyphIndexes() 和 setPositions()。

bool QGlyphRun::isEmpty() const

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

bool QGlyphRun::isRightToLeft() const

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

请参阅setRightToLeft() 和 flags()。

bool QGlyphRun::overline() const

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

另请参阅setOverline() 和 flags()。

QList<QPointF> QGlyphRun::positions() const

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

另请参阅setPositions()。

QRawFont QGlyphRun::rawFont() const

返回为这个 QGlyphRun 对象所选中的字体。

另请参阅setRawFont()。

void QGlyphRun::setBoundingRect(const QRectF &boundingRect)

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

注意: 除非您正在实现文本造型,您通常不需要使用此功能。此函数专门用于 QGlyphRun 应该表示一个小于它包含的字形面积的区域。例如,如果通过调用 QTextLayout::glyphRuns() 获取字形运行,并且指定的范围只包含连字符的一部分(其中两个或多个字符被组合成一个字形),在这种情况下,边界矩形应仅包含基于连字符中字符平均宽度的合适部分。

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

另请参阅boundingRect()。

void QGlyphRun::setFlag(QGlyphRun::GlyphRunFlag flag, bool enabled = true)

如果 enabled 为真,则启用 flag;否则禁用。

另请参阅flags() 和 setFlags()。

void QGlyphRun::setFlags(QGlyphRun::GlyphRunFlags flags)

将这个 QGlyphRun 的标志设置为 flags

另请参阅setFlag() 和 flags()。

void QGlyphRun::setGlyphIndexes(const QList<quint32> &glyphIndexes)

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

另请参阅glyphIndexes()。

void QGlyphRun::setOverline(bool overline)

指示当 overline 为 true 时,应使用上划线装饰来绘制此 QGlyphRun。否则,应使用不带上划线装饰来绘制 QGlyphRun

另请参见 overline(),setFlag() 和 setFlags()。

void QGlyphRun::setPositions(const QList<QPointF> &positions)

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

另请参见 positions()。

void QGlyphRun::setRawData(const quint32 *glyphIndexArray, const QPointF *glyphPositionArray, int size)

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

请参阅setGlyphIndexes() 和 setPositions()。

void QGlyphRun::setRawFont(const QRawFont &rawFont)

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

另请参见 rawFont() 和 setGlyphIndexes()。

void QGlyphRun::setRightToLeft(bool rightToLeft)

指示当 rightToLeft 为 true 时,此 QGlyphRun 包含的字形应从右到左排序。否则,假定字形的顺序为从左到右。

另请参见 isRightToLeft(),setFlag() 和 setFlags()。

[since 6.5] void QGlyphRun::setSourceString(const QString &sourceString)

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

此函数自 Qt 6.5 起引入。

另请参见 sourceString() 和 stringIndexes()。

void QGlyphRun::setStrikeOut(bool strikeOut)

指示当 strikeOut 为 true 时,此 QGlyphRun 应使用划线装饰来绘制。否则,此 QGlyphRun 应无划线装饰地绘制。

另请参见 strikeOut(),setFlag() 和 setFlags()。

[since 6.5] void QGlyphRun::setStringIndexes(const QList<qsizetype> &stringIndexes)

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

有关此列表约定的更多详细信息,请参阅 stringIndexes()。

此函数自 Qt 6.5 起引入。

另请参阅stringIndexes() 和 sourceString()。

void QGlyphRun::setUnderline(bool underline)

指示如果 underline 为 true,则应对此 QGlyphRun 进行带有下划线装饰的绘制。否则,应对 QGlyphRun 进行无下划线装饰的绘制。

另请参阅underline(),setFlag() 和 setFlags()。

[since 6.5] QString QGlyphRun::sourceString() const

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

此函数自 Qt 6.5 起引入。

另请参阅setSourceString(),stringIndexes() 和 QTextLayout::glyphRuns()。

bool QGlyphRun::strikeOut() const

如果此 QGlyphRun 应该用线删除装饰进行绘制,则返回 true

另请参阅setStrikeOut() 和 flags()。

[since 6.5] QList<qsizetype> QGlyphRun::stringIndexes() const

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

由于单个字符可能对应于源字符串中的多个字符,因此字符串索引列表可能会有间隔。例如,如果字符串 "first" 通过包含 "fi" 字符对连字符的字体进行处理,则五个字符的字符串将生成仅包含四个字符的唯一字符运行。在这种情况下,字符索引可能是 (1, 2, 3, 4)(四个任意字符索引),而字符串索引将是 (0, 2, 3, 4)。符号在字符串的逻辑顺序中,因此在这种情况下可以推断第一个符号跨越字符 0 和 1。

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

字符串索引与字符串相对应,可选通过 sourceString 获取。

此函数自 Qt 6.5 起引入。

另请参阅setStringIndexes(),sourceString() 和 QTextLayout::glyphRuns()。

[noexcept] void QGlyphRun::swap(QGlyphRun &other)

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

bool QGlyphRun::underline() const

如果此 QGlyphRun 应该用下划线装饰进行绘制,则返回 true

另请参阅 setUnderline() 和 flags()。

bool QGlyphRun::operator!=(const QGlyphRun &other) const

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

QGlyphRun &QGlyphRun::operator=(const QGlyphRun &other)

other 赋值到此 QGlyphRun 对象。

bool QGlyphRun::operator==(const QGlyphRun &other) const

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

© 2024 The Qt Company Ltd. 包含在本文档中的文档贡献是各自所有者的版权。本文档是根据自由软件基金会发布的 GNU自由文档许可证版本1.3 的条款许可的。Qt 及其相应标志是芬兰的 The Qt Company Ltd. 和/或全球其他国家的商标。所有其他商标均为各自所有者的财产。