QRawFont 类

QRawFont 类提供了对单个字体物理实例的访问。 更多...

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

公共类型

枚举AntialiasingType { PixelAntialiasing, SubPixelAntialiasing }
枚举LayoutFlag { SeparateAdvances, KernedAdvances, UseDesignMetrics }
标志LayoutFlags

公共函数

QRawFont()
QRawFont(const QString &fileName, qreal pixelSize, QFont::HintingPreference hintingPreference = QFont::PreferDefaultHinting)
QRawFont(const QByteArray &fontData, qreal pixelSize, QFont::HintingPreference hintingPreference = QFont::PreferDefaultHinting)
QRawFont(const QRawFont &other)
~QRawFont()
QList<QPointF>advancesForGlyphIndexes(const QList<quint32> &glyphIndexes, QRawFont::LayoutFlags layoutFlags) const
QList<QPointF>advancesForGlyphIndexes(const QList<quint32> &glyphIndexes) const
booladvancesForGlyphIndexes(const quint32 *glyphIndexes, QPointF *advances, int numGlyphs) const
booladvancesForGlyphIndexes(const quint32 *glyphIndexes, QPointF *advances, int numGlyphs, QRawFont::LayoutFlags layoutFlags) const
QImagealphaMapForGlyph(quint32 glyphIndex, QRawFont::AntialiasingType antialiasingType = SubPixelAntialiasing, const QTransform &transform = QTransform()) const
qrealascent() const
qrealaverageCharWidth() const
QRectFboundingRect(quint32 glyphIndex) const
qrealcapHeight() const
qrealdescent() const
QStringfamilyName() const
(since 6.7) QByteArrayfontTable(QFont::Tag tag) const
QByteArrayfontTable(const char *tag) const
boolglyphIndexesForChars(const QChar *chars, int numChars, quint32 *glyphIndexes, int *numGlyphs) const
QList<quint32>glyphIndexesForString(const QString &text) const
QFont::HintingPreferencehintingPreference() const
boolisValid() const
qrealleading() const
qreallineThickness() const
voidloadFromData(const QByteArray &fontData, qreal pixelSize, QFont::HintingPreference hintingPreference)
voidloadFromFile(const QString &fileName, qreal pixelSize, QFont::HintingPreference hintingPreference)
qrealmaxCharWidth() const
QPainterPathpathForGlyph(quint32 glyphIndex) const
qrealpixelSize() const
voidsetPixelSize(qreal pixelSize)
QFont::Stylestyle() const
QStringstyleName() const
QListsupportedWritingSystems() const
boolsupportsCharacter(QChar character) const
boolsupportsCharacter(uint ucs4) const
voidswap(QRawFont &other)
qrealunderlinePosition() const
qrealunitsPerEm() const
intweight() const
qrealxHeight() const
booloperator!=(const QRawFont &other) const
QRawFont &operator=(const QRawFont &other)
booloperator==(const QRawFont &other) const

静态公共成员

QRawFontfromFont(const QFont &font, QFontDatabase::WritingSystem writingSystem = QFontDatabase::Any)
size_tqHash(const QRawFont &font, size_t seed = 0)

详细描述

注意:QRawFont 是一个低级类。对于大多数用途,QFont 是一个更合适的类。

通常,在用户界面中呈现文本时,用于渲染字符的确切字体在一定程度上是未知的。这可能是由于几个原因:例如,开发者可能对目标系统上实际存在的物理字体感到意外,或者文本可能包含用户选择的样式、大小或书写系统,这些在代码中选择的字体不支持。

因此,Qt 的 QFont 类实际上代表了字体查询。当文本被解析时,Qt 将尽最大努力将文本与查询匹配,但根据支持情况,不同的字体可能会在后台使用。

对于大多数用例,这是预期的并且是必要的,因为它最小化了用户界面中文本无法显示的可能性。然而,在某些情况下,可能需要更直接地控制该过程。这就是 QRawFont 类存在的原因。

QRawFont 对象表示给定像素大小下给定字体的单个物理实例。即通常表示一组 TrueType 或 OpenType 字体表,并使用用户指定的像素大小将度量转换为逻辑像素单位。它可以与 QGlyphRun 类结合使用,以在特定位置绘制特定的符号索引,并获得对物理字体中一些相关数据的访问器。

QRawFont 仅在 Windows 平台上为主要的字体技术提供支持:GDI 和 DirectWrite,在 Linux 平台上为 FreeType,在 macOS 上的 CoreText。对于其他字体后端,API 将被禁用。

QRawFont 可以通过多种方式构建

  • 可以通过调用 QTextLayout::glyphs() 或 QTextFragment::glyphs() 来构建。返回的 QGlyphs 对象将包含代表渲染文本各个部分的实际字体使用的 QRawFont 对象。
  • 可以通过向 QRawFont::fromFont() 函数传递一个 QFont 对象来构建。该函数将返回一个代表响应 QFont 查询和所选书写系统的字体的 QRawFont 对象。
  • 可以通过直接将文件名或 QByteArray 传递给 QRawFont 构造函数,或者通过调用 loadFromFile() 或 loadFromData() 来构建。在这种情况下,字体将不会在 QFontDatabase 中注册,并且它将不会作为常规字体选择的一部分可用。

QRawFont 被认为是它在其中构建的线程本地的(无论是使用构造函数,还是通过调用 loadFromData() 或 loadFromFile()). QRawFont 不能移动到不同的线程,但必须在有问题的线程中重新创建。

注意:为了减少在应用内部循环中静态文本的重塑和重排的需要,更好的选择是 QStaticText 类,因为它优化了缓存的内存成本,并提供了对绘图引擎特定缓存的额外加速的机会。

成员类型文档

enum QRawFont::AntialiasingType

此枚举表示在 alphaMapForGlyph() 函数中,字形以何种方式可被光栅化。

常量描述
QRawFont::PixelAntialiasing0将通过测量形状对整个像素的覆盖率来进行光栅化。返回的图像包含基于字形形状覆盖率的每个像素的 alpha 值。
QRawFont::SubPixelAntialiasing1将通过测量每个子像素的覆盖率来进行光栅化,为每个像素的红色、绿色和蓝色组件返回单独的 alpha 值。

enum QRawFont::LayoutFlag
flags QRawFont::LayoutFlags

此枚举告诉 advancesForGlyphIndexes() 函数如何计算进位。

常量描述
QRawFont::SeparateAdvances0将为每个字形单独计算进位。
QRawFont::KernedAdvances1将在相邻字形之间应用字距进行调整。注意,目前不支持基于 OpenType GPOS 的字距调整。
QRawFont::UseDesignMetrics2使用设计度量代替针对绘图设备分辨率调整的提示度量。可以与任何上述选项进行或操作。

LayoutFlags 类型是 QFlags<LayoutFlag> 的同义词。它存储 LayoutFlag 值的或组合。

成员函数文档

QRawFont::QRawFont()

构建一个无效的 QRawFont。

QRawFont::QRawFont(const QString &fileName, qreal pixelSize, QFont::HintingPreference hintingPreference = QFont::PreferDefaultHinting)

构建一个代表文件中包含的字体(由 fileName 引用)的 QRawFont,其大小为 pixelSize,并使用指定的 hintingPreference 提示偏好。

注意:引用的文件必须包含 TrueType 或 OpenType 字体。

QRawFont::QRawFont(const QByteArray &fontData, qreal pixelSize, QFont::HintingPreference hintingPreference = QFont::PreferDefaultHinting)

构造一个表示由供应的fontData声明的字体、大小为pixelSize(像素为单位)的 QRawFont 对象,并使用由hintingPreference指定的抗锯齿首选项。

注意:数据必须包含 TrueType 或 OpenType 字体。

QRawFont::QRawFont(const QRawFont &other)

创建一个 QRawFont 对象,它是other的副本。

[noexcept] QRawFont::~QRawFont()

销毁 QRawFont 对象

QList<QPointF> QRawFont::advancesForGlyphIndexes(const QList<quint32> &glyphIndexes, QRawFont::LayoutFlags layoutFlags) const

返回每个glyphIndexes在像素单位中的 QRawFont 的增量。增量给出了从给定 glypy 的位置到下一个 glypy 应该绘制的位置的距离,以使两个 glypy 看起来像是未间隔的。增量的计算如何进行由layoutFlags控制。

注意:当请求KernedAdvances时,本函数将为字体应用来自 TrueType 表 KERN 的字距调整规则,如果字体中提供了这些规则。在许多现代字体中,字距调整通过 OpenType 规则或 AAT 规则处理,这需要应用完整的形状步骤。要获取全形状文本的结果,请使用QTextLayout

另请参阅:QTextLine::horizontalAdvance(),QFontMetricsF::horizontalAdvance()和QTextLayout::glyphRuns()。

QList<QPointF> QRawFont::advancesForGlyphIndexes(const QList<quint32> &glyphIndexes) const

这是一个重载函数。

返回每个glyphIndexes在像素单位中的 QRawFont 的增量。增量给出了从给定 glypy 的位置到下一个 glypy 应该绘制的位置的距离,以使两个 glypy 看起来像是未间隔的。每个 glypy 的增量单独计算。

另请参阅:QTextLine::horizontalAdvance()和QFontMetricsF::horizontalAdvance()。

bool QRawFont::advancesForGlyphIndexes(const quint32 *glyphIndexes, QPointF *advances, int numGlyphs) const

这是一个重载函数。

返回给定QRawFont中每个glyphIndexes的 advances,单位为像素。advances 表示给定字形位置到下一个字形绘制位置的距离,使得两个字形看起来无间隔。字形索引通过数组glyphIndexes给出,而结果通过advances返回,它们都必须有numGlyphs个元素。每个字形的 advances 是单独计算的。

另请参阅:QTextLine::horizontalAdvance()和QFontMetricsF::horizontalAdvance()。

bool QRawFont::advancesForGlyphIndexes(const quint32 *glyphIndexes, QPointF *advances, int numGlyphs, QRawFont::LayoutFlags layoutFlags) const

返回给定QRawFont的每个glyphIndexes的 advances,单位为像素。advances 表示给定字形位置到下一个字形绘制位置的距离,使得两个字形看起来无间隔。字形索引通过数组glyphIndexes给出,而结果通过advances返回,它们都必须有numGlyphs个元素。advances 的计算方式由layoutFlags控制。

注意:当请求KernedAdvances时,本函数将为字体应用来自 TrueType 表 KERN 的字距调整规则,如果字体中提供了这些规则。在许多现代字体中,字距调整通过 OpenType 规则或 AAT 规则处理,这需要应用完整的形状步骤。要获取全形状文本的结果,请使用QTextLayout

另请参阅:QTextLine::horizontalAdvance(),QFontMetricsF::horizontalAdvance()和QTextLayout::glyphRuns()。

QImage QRawFont::alphaMapForGlyph(quint32 glyphIndex, QRawFont::AntialiasingType antialiasingType = SubPixelAntialiasing, const QTransform &transform = QTransform()) const

此函数返回给定glyphIndex的底层字体的字形光栅化图像,使用指定的transform。如果QRawFont无效,此函数将返回一个无效的QImage

如果字体是彩色字体,则结果图像将包含当前像素大小的渲染字形。在这种情况下,antialiasingType将被忽略。

否则,如果antialiasingType设置为QRawFont::SubPixelAntialiasing,则结果图像将以QImage::Format_RGB32格式,每个像素的 RGB 值表示字形光栅化中像素的亚像素不透明度。否则,图像将以QImage::Format_Indexed8格式,每个像素包含光栅化中像素的不透明度。

另请参阅pathForGlyph()和QPainter::drawGlyphRun

qreal QRawFont::ascent() const

返回此QRawFont的 ascent,单位为像素。

字体的高度 ascent 是基线到字符伸延到最高位置的距离。在实践中,一些字体设计师会打破这个规则,例如,当他们在字符上方放置多个装饰符,或者为了适应异国语言中的不寻常字符,所以这个值可能太小(虽然很少)。

另请参阅QFontMetricsF::ascent

qreal QRawFont::averageCharWidth() const

返回此QRawFont的平均字符宽度,单位为像素。

另请参阅QFontMetricsF::averageCharWidth

QRectF QRawFont::boundingRect(quint32 glyphIndex) const

返回包含给定 glyphIndex 的字形的最小矩形。

qreal QRawFont::capHeight() const

返回此 QRawFont 在像素单位上的上沿高度。

字体上沿高度是指大写字母在基准线之上的高度。具体来说,是那些平的大写字母的高度,例如 H 或 I,而不是像 O 那样圆形的字母,也不是像 A 那样尖形的字母,因为它们都可能显示超出。

另请参阅QFontMetricsF::capHeight

qreal QRawFont::descent() const

返回此 QRawFont 在像素单位上的下降。

下降是从基准线到底部字符延伸的距离。在实际应用中,一些字体设计者可能会打破这个规则,例如为了容纳异国语言的特殊字符,所以这个值可能会太小,尽管这种情况很少见。

另请参阅QFontMetricsF::descent

QString QRawFont::familyName() const

返回此 QRawFont 的系列名称。

[since 6.7] QByteArray QRawFont::fontTable(QFont::Tag tag) const

从底层物理字体检索由 tag 指定的 sfnt 表,如果没有找到此类表,则返回空的字节数组。返回的字体表的字节顺序是大端,就像 sfnt 格式所指定的那样。

此函数首次在 Qt 6.7 中引入。

QByteArray QRawFont::fontTable(const char *tag) const

此函数重载了 fontTable(QFont::Tag)。

名称必须是四个字符的字符串。

[静态] QRawFont QRawFont::fromFont(const QFont &font, QFontDatabase::WritingSystem writingSystem = QFontDatabase::Any)

基于一个 font 查询获取物理表示。返回的物理字体是 Qt 用来在选定 writingSystem 中显示文本的首选字体。

注意:此函数可能代价高昂,不应在性能敏感的代码中调用。

bool QRawFont::glyphIndexesForChars(const QChar *chars, int numChars, quint32 *glyphIndexes, int *numGlyphs) const

使用基础字体中的 CMAP 表将 Unicode 点字符串转换为字形索引。该函数的工作方式类似于 glyphIndexesForString(),除了它接受一个数组(《i translate="no">chars),结果将通过《i translate="no">glyphIndexes数组返回,并设置在《i translate="no">numGlyphs》中的字形数量。必须保证《i translate="no">glyphIndexes数组的大小至少为《i translate="no">numChars,如果仍然不足以使用,此函数将返回 false,然后您可以从《i translate="no">numGlyphs返回的大小调整《i translate="no">glyphIndexes的大小。

另请参阅glyphIndexesForString(),advancesForGlyphIndexes(),《a href="qglyphrun.html" translate="no">QGlyphRun》,QTextLayout::glyphRuns(),和 QTextFragment::glyphRuns》。

QList<quint32> QRawFont::glyphIndexesForString(const QString &text) const

使用基础字体中的 CMAP 表将《i translate="no">text提供的 Unicode 点字符串转换为字形索引,并返回包含结果的列表。

请注意,如果字体中存在其他影响文本形状的表,则返回的字形索引将无法正确表示文本的渲染。要获取正确形状的文本,您可以使用 QTextLayout 来布局和塑造文本,然后调用 QTextLayout::glyphs() 以获取字形索引列表和 QRawFont 对的实现。

另请参阅advancesForGlyphIndexes(),glyphIndexesForChars(),《a href="qglyphrun.html" translate="no">QGlyphRun》,QTextLayout::glyphRuns(),和 QTextFragment::glyphRuns》。

QFont::HintingPreference QRawFont::hintingPreference() const

返回用于构建此 QRawFont 的提示偏好。

另请参阅QFont::hintingPreference》。

bool QRawFont::isValid() const

如果QRawFont有效,则返回 true,否则返回 false。

qreal QRawFont::leading() const

以像素为单位返回此 QRawFont 的行间距。

这是自然行间间隔。

另请参阅QFontMetricsF::leading》。

qreal QRawFont::lineThickness() const

返回与在此字体中绘制的文本一起绘制的线条(下划线、上划线等)的厚度。

void QRawFont::loadFromData(const QByteArray &fontData, qreal pixelSize, QFont::HintingPreference hintingPreference)

用提供的 fontData 中包含的字体替换当前 QRawFont,对于《i translate="no">pixelSize 给定的尺寸(以像素为单位),并使用指定的提示偏好《i translate="no">hintingPreference。

fontData 必须包含 TrueType 或 OpenType 字体。

另请参阅loadFromFile》。

void QRawFont::loadFromFile(const QString &fileName, qreal pixelSize, QFont::HintingPreference hintingPreference)

用文件 fileName 指定的内容替换当前 QRawFont,该文件的像素大小由 pixelSize 给出,并使用由 hintingPreference 指定的抗锯齿首选项。

该文件必须引用一个 TrueType 或 OpenType 字体。

另请参阅 loadFromData().

qreal QRawFont::maxCharWidth() const

返回字体中最宽字符的宽度。

另请参阅 QFontMetricsF::maxWidth().

QPainterPath QRawFont::pathForGlyph(quint32 glyphIndex) const

此函数如果 QRawFont 有效,则返回给定 glyphIndex 在底层字体中的字形形状。否则,返回一个空的 QPainterPath

返回的字形始终未抗锯齿。

另请参阅 alphaMapForGlyph() 和 QPainterPath::addText().

qreal QRawFont::pixelSize() const

返回为此 QRawFont 设置的像素大小。像素大小影响字形的光栅化方式,pathForGlyph() 返回的字形的大小,以及用于将从设计单位转换为逻辑像素单位。

另请参阅 setPixelSize().

void QRawFont::setPixelSize(qreal pixelSize)

将此字体渲染的像素大小设置为 pixelSize

另请参阅 pixelSize().

QFont::Style QRawFont::style() const

返回此 QRawFont 的样式。

另请参阅 QFont::style().

QString QRawFont::styleName() const

返回此 QRawFont 的样式名称。

另请参阅 QFont::styleName().

QList<QFontDatabase::WritingSystem> QRawFont::supportedWritingSystems() const

返回字体支持的书写系统列表,根据字体文件中设计师提供的字体信息。请注意,这并不能保证字体支持特定的unicode点。你可以使用 supportsCharacter() 来检查单个、特定的字符是否受支持。

注意: 该列表基于字体OS/2表中设置的unicode范围和代码页范围确定,需要底层字体文件中存在此表。

另请参阅 supportsCharacter()。

bool QRawFont::supportsCharacter(QChar character) const

如果字体中存在与给定字符character相应的字形,则返回true

另请参阅 supportedWritingSystems()。

bool QRawFont::supportsCharacter(uint ucs4) const

这是一个重载函数。

如果字体中存在与UCS-4编码字符ucs4相应的字形,则返回true

另请参阅 supportedWritingSystems()。

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

other交换这个原始字体。此函数非常快速且永远不会失败。

qreal QRawFont::underlinePosition() const

返回用此字体渲染的文本下方绘制下划线的基线位置。

qreal QRawFont::unitsPerEm() const

返回定义此QRawFont中em平方的宽度和高度的布局单位的数量。此值在与像素大小一起使用时用于将布局度量转换为像素单位,因为内部度量是以布局单位指定的,像素大小给出了1em在像素中的大小。

另请参阅 pixelSize()和setPixelSize()。

int QRawFont::weight() const

返回此QRawFont的重量。

另请参阅 QFont::weight()。

qreal QRawFont::xHeight() const

返回此QRawFont在像素单位中的xHeight。

这通常与字符'x'的高度相同,但并不总是如此。

另请参阅 QFontMetricsF::xHeight()。

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

如果此QRawFont不等于other,则返回true。否则返回false

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

other分配给此QRawFont

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

如果此QRawFont等于other,则返回true。否则返回false

相关非成员函数

[noexcept] size_t qHash(const QRawFont &font, size_t seed = 0)

返回 font 的哈希值。如果指定了,将使用 seed 初始化哈希。

© 2024 Qt公司。本文件中的文档贡献是各自所有者的版权。本提供的文档是根据自由软件基金会发布的 GNU自由文档许可证版本1.3 的条款许可的。Qt及其相关标志是芬兰以及全球其他国家的 Qt公司注册商标。所有其他商标均归其所有者所有。