QRawFont 类
QRawFont 类提供了对单个字体物理实例的访问。 更多...
头文件 | #include <QRawFont> |
CMake | find_package(Qt6 REQUIRED COMPONENTS Gui) target_link_libraries(mytarget PRIVATE Qt6::Gui) |
qmake | QT += gui |
- 所有成员列表,包括继承成员
- QRawFont 是 隐式共享类 的一部分。
公共类型
枚举 | 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 |
bool | advancesForGlyphIndexes(const quint32 *glyphIndexes, QPointF *advances, int numGlyphs) const |
bool | advancesForGlyphIndexes(const quint32 *glyphIndexes, QPointF *advances, int numGlyphs, QRawFont::LayoutFlags layoutFlags) const |
QImage | alphaMapForGlyph(quint32 glyphIndex, QRawFont::AntialiasingType antialiasingType = SubPixelAntialiasing, const QTransform &transform = QTransform()) const |
qreal | ascent() const |
qreal | averageCharWidth() const |
QRectF | boundingRect(quint32 glyphIndex) const |
qreal | capHeight() const |
qreal | descent() const |
QString | familyName() const |
(since 6.7) QByteArray | fontTable(QFont::Tag tag) const |
QByteArray | fontTable(const char *tag) const |
bool | glyphIndexesForChars(const QChar *chars, int numChars, quint32 *glyphIndexes, int *numGlyphs) const |
QList<quint32> | glyphIndexesForString(const QString &text) const |
QFont::HintingPreference | hintingPreference() const |
bool | isValid() const |
qreal | leading() const |
qreal | lineThickness() const |
void | loadFromData(const QByteArray &fontData, qreal pixelSize, QFont::HintingPreference hintingPreference) |
void | loadFromFile(const QString &fileName, qreal pixelSize, QFont::HintingPreference hintingPreference) |
qreal | maxCharWidth() const |
QPainterPath | pathForGlyph(quint32 glyphIndex) const |
qreal | pixelSize() const |
void | setPixelSize(qreal pixelSize) |
QFont::Style | style() const |
QString | styleName() const |
QList | supportedWritingSystems() const |
bool | supportsCharacter(QChar character) const |
bool | supportsCharacter(uint ucs4) const |
void | swap(QRawFont &other) |
qreal | underlinePosition() const |
qreal | unitsPerEm() const |
int | weight() const |
qreal | xHeight() const |
bool | operator!=(const QRawFont &other) const |
QRawFont & | operator=(const QRawFont &other) |
bool | operator==(const QRawFont &other) const |
静态公共成员
QRawFont | fromFont(const QFont &font, QFontDatabase::WritingSystem writingSystem = QFontDatabase::Any) |
相关非成员
size_t | qHash(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::PixelAntialiasing | 0 | 将通过测量形状对整个像素的覆盖率来进行光栅化。返回的图像包含基于字形形状覆盖率的每个像素的 alpha 值。 |
QRawFont::SubPixelAntialiasing | 1 | 将通过测量每个子像素的覆盖率来进行光栅化,为每个像素的红色、绿色和蓝色组件返回单独的 alpha 值。 |
enum QRawFont::LayoutFlag
flags QRawFont::LayoutFlags
此枚举告诉 advancesForGlyphIndexes() 函数如何计算进位。
常量 | 值 | 描述 |
---|---|---|
QRawFont::SeparateAdvances | 0 | 将为每个字形单独计算进位。 |
QRawFont::KernedAdvances | 1 | 将在相邻字形之间应用字距进行调整。注意,目前不支持基于 OpenType GPOS 的字距调整。 |
QRawFont::UseDesignMetrics | 2 | 使用设计度量代替针对绘图设备分辨率调整的提示度量。可以与任何上述选项进行或操作。 |
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 是基线到字符伸延到最高位置的距离。在实践中,一些字体设计师会打破这个规则,例如,当他们在字符上方放置多个装饰符,或者为了适应异国语言中的不寻常字符,所以这个值可能太小(虽然很少)。
qreal QRawFont::averageCharWidth() const
返回此QRawFont的平均字符宽度,单位为像素。
另请参阅QFontMetricsF::averageCharWidth。
QRectF QRawFont::boundingRect(quint32 glyphIndex) const
返回包含给定 glyphIndex 的字形的最小矩形。
qreal QRawFont::capHeight() const
返回此 QRawFont 在像素单位上的上沿高度。
字体上沿高度是指大写字母在基准线之上的高度。具体来说,是那些平的大写字母的高度,例如 H 或 I,而不是像 O 那样圆形的字母,也不是像 A 那样尖形的字母,因为它们都可能显示超出。
qreal QRawFont::descent() const
返回此 QRawFont 在像素单位上的下降。
下降是从基准线到底部字符延伸的距离。在实际应用中,一些字体设计者可能会打破这个规则,例如为了容纳异国语言的特殊字符,所以这个值可能会太小,尽管这种情况很少见。
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公司注册商标。所有其他商标均归其所有者所有。