QFontMetricsF 类

QFontMetricsF 类提供字体度量信息。 更多信息...

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

注意:本类中所有函数都是 可重入的

公共函数

QFontMetricsF(const QFont &font)
QFontMetricsF(const QFont &font, const QPaintDevice *paintdevice)
QFontMetricsF(const QFontMetrics &fontMetrics)
QFontMetricsF(const QFontMetricsF &fm)
~QFontMetricsF()
qrealascent() const
qrealaverageCharWidth() const
QRectFboundingRect(const QString &text) const
(since 6.3) QRectFboundingRect(const QString &text, const QTextOption &option) const
QRectFboundingRect(QChar ch) const
QRectFboundingRect(const QRectF &rect, int flags, const QString &text, int tabStops = 0, int *tabArray = nullptr) const
qrealcapHeight() const
qrealdescent() const
QStringelidedText(const QString &text, Qt::TextElideMode mode, qreal width, int flags = 0) const
qrealfontDpi() const
qrealheight() const
qrealhorizontalAdvance(const QString &text, int length = -1) const
qrealhorizontalAdvance(QChar ch) const
(since 6.3) qrealhorizontalAdvance(const QString &text, const QTextOption &option) const
boolinFont(QChar ch) const
boolinFontUcs4(uint ch) const
qrealleading() const
qrealleftBearing(QChar ch) const
qreallineSpacing() const
qreallineWidth() const
qreal最大宽度() const
qreal最小左基准() const
qreal最小右基准() const
qreal上划线位置() const
qreal右基准(QChar ch) const
QSizeF大小(int flags, const QString &text, int tabStops = 0, int *tabArray = nullptr) const
qreal删除线位置() const
void交换(QFontMetricsF &other)
QRectF紧边界矩形(const QString &text) const
(since 6.3) QRectF紧边界矩形(const QString &text, const QTextOption &option) const
qreal下划线位置() const
qrealx高度() const
bool不等号运算符(const QFontMetricsF &other) const
QFontMetricsF &赋值运算符(const QFontMetricsF &fm)
QFontMetricsF &赋值运算符(const QFontMetrics &other)
QFontMetricsF &赋值运算符(QFontMetricsF &&other)
bool相等运算符(const QFontMetricsF &other) const

详细描述

QFontMetricsF 函数用于计算给定字体的字符和字符串大小。您可以使用现有的 QFont 构造一个 QFontMetricsF 对象以获取该字体的度量信息。如果之后字体发生了变化,字体度量对象将 不会 更新。

一旦创建,该对象提供了访问字体、其字符以及以该字体渲染的字符串的各个度量值的功能。

有几个函数在字体上操作:ascent(),descent(),height(),leading() 和 lineSpacing() 返回字体的基本大小属性。函数 underlinePos(),overlinePos(),strikeOutPos() 和 lineWidth() 返回下划线、上划线或删除线的属性。所有这些函数都运行得很快。

还有一些函数可以对字体中的字符集进行操作:minLeftBearing(),minRightBearing() 和 maxWidth()。由于必须慢,我们建议尽可能避免使用这些函数。

对于每个字符,您都可以获取其 horizontalAdvance(),leftBearing() 和 rightBearing(),并使用 inFont() 查询该字符是否在字体中。您还可以将字符视为字符串,并对其使用字符串函数。

字符串函数包括 horizontalAdvance(),返回字符串的像素宽度(或打印机中的点),boundingRect(),返回足以容纳渲染字符串的矩形,以及 size(),返回该矩形的尺寸。

示例

QFont font("times", 24);
QFontMetricsF fm(font);
qreal pixelsWide = fm.horizontalAdvance("What's the advance width of this text?");
qreal pixelsHigh = fm.height();

另请参阅QFontQFontInfoQFontDatabase

成员函数文档

[显式] QFontMetricsF::QFontMetricsF(const QFont &font)

font 构造一个字体度量对象。

字体度量将与用于创建 font 的绘图设备兼容。

字体度量对象在其创建时存储传入构造函数的字体信息,如果后来字体属性发生了改变,该对象将不会更新。

使用函数 QFontMetricsF(const QFont &, QPaintDevice *) 获取与特定绘画设备兼容的字体度量。

QFontMetricsF::QFontMetricsF(const QFont &font, const QPaintDevice *paintdevice)

fontpaintdevice 构造字体度量对象。

该字体度量将与传入的 paintdevice 相兼容。如果 paintdevicenullptr,则度量将为屏幕兼容,即使用该字体在控件或位图上绘制文本时得到的度量,而不是在 QWidgetQPictureQPrinter 上。

字体度量对象在其创建时存储传入构造函数的字体信息,如果后来字体属性发生了改变,该对象将不会更新。

QFontMetricsF::QFontMetricsF(const QFontMetrics &fontMetrics)

从给定的 fontMetrics 对象构造具有浮点精度的字体度量对象。

QFontMetricsF::QFontMetricsF(const QFontMetricsF &fm)

构造 fm 的副本。

[noexcept] QFontMetricsF::~QFontMetricsF()

销毁字体度量对象并释放所有分配的资源。

qreal QFontMetricsF::ascent() const

返回字体的上升值。

字体的上升值是基线到最高字符延伸距离。在实践中,一些字体设计者会打破这个规则,例如当一个字符上方放置多个重音符号,或者为了适应某个字符,所以这个值可能会太小,尽管这种情况很少见。

另请参阅descent

qreal QFontMetricsF::averageCharWidth() const

返回字体中符号的平均宽度。

QRectF QFontMetricsF::boundingRect(const QString &text) const

返回由文本指定的字符串中的字符的包围矩形。包围矩形总是涵盖文本绘制在 (0, 0) 的像素集。

请注意,包围矩形可能会延伸到 (0, 0) 的左侧,例如对于斜体字体,并且返回矩形的宽度可能与 horizontalAdvance() 方法返回的值不同。

如果您想了解字符串的进阶宽度(用于并列布局字符串),请使用 horizontalAdvance()。

换行符被作为普通字符处理,而不是作为行分隔符。

包围矩形的宽度至少与通过 height() 返回的值一样大。

另请参阅horizontalAdvance(),height() 和 QPainter::boundingRect

[since 6.3] QRectF QFontMetricsF::boundingRect(const QString &text, const QTextOption &option) const

返回使用option布局的由text指定的字符串中的字符的边界矩形。边界矩形始终覆盖至少文本在(0, 0)处绘制的像素集。

请注意,包围矩形可能会延伸到 (0, 0) 的左侧,例如对于斜体字体,并且返回矩形的宽度可能与 horizontalAdvance() 方法返回的值不同。

如果您想了解字符串的进阶宽度(用于并列布局字符串),请使用 horizontalAdvance()。

换行符被作为普通字符处理,而不是作为行分隔符。

包围矩形的宽度至少与通过 height() 返回的值一样大。

此函数是在 Qt 6.3 中引入的。

另请参阅horizontalAdvance(),height() 和 QPainter::boundingRect

QRectF QFontMetricsF::boundingRect(QChar ch) const

返回字符ch相对于基线最左端的边界矩形。

请注意,边界矩形可能延伸到(0, 0)的左侧,例如对于斜体字体,并且文本输出可能覆盖边界矩形中的所有像素。

请注意,该矩形通常延伸到基线上方和下方。

另请参阅horizontalAdvance().

QRectF QFontMetricsF::boundingRect(const QRectF &rect, int flags, const QString &text, int tabStops = 0, int *tabArray = nullptr) const

这是一个重载函数。

返回指定text中字符的边界矩形。这是文本在约束于由rect指定的边界矩形时将覆盖的像素集。如果rectnullptr对象的引用,例如在传递默认构造的QRectF时,边界矩形将不会约束自身到大小。

flags参数是以下标志的按位或操作

Qt::Horizontal对齐默认为 Qt::AlignLeft 且垂直对齐默认为 Qt::AlignTop

如果设置了多个水平或多个垂直对齐标志,则结果对齐是未定义的。

这些标志定义在 Qt::AlignmentFlag 中。

如果 Qt::TextExpandTabsflags 中被设置,将使用以下行为来解析文本中的制表符。

  • 如果 tabArray 非空,它指定了一个文本中制表符的 0 结束的像素位置序列。
  • 如果 tabStops 非零,它将作为制表符间距(以像素为单位)使用。

注意,边界矩形可能扩展到 (0, 0) 左侧,例如对于斜体字。

换行符被处理为行中断。

尽管实际字符高度不同,但 "Yes" 和 "yes" 的边界矩形高度是相同的。

此函数返回的边界矩形略大于简单边界矩形函数计算的边界矩形。此函数使用必要的最大左边距和右边距(对于正确对齐的文本),而不是使用简单的边界矩形函数。此外,使用 fontHeight() 和 lineSpacing() 来计算高度,而不是单个字符的高度。

另请参阅 horizontalAdvance(),QPainter::boundingRect() 和 Qt::Alignment

qreal QFontMetricsF::capHeight() const

返回字体的上边缘高度。

字体的上边缘高度是指大写字母超出基线的高度。具体来说,是平面大写字母的高度(例如 H 或 I)而不是圆形字母(例如 O)或尖头字母(例如 A),后两者可能显示溢出。

另请参阅 ascent

qreal QFontMetricsF::descent() const

返回字体的下降。

下降是从基线到字符延伸到最低点之间的距离。请注意,这与 X 是不同的,X 会增加 1 像素。在实际应用中,某些字体设计者会打破这个规则,例如为了适应某些字符,因此这个值可能太小(尽管这种情况很少见)。

另请参阅 ascent

QString QFontMetricsF::elidedText(const QString &text, Qt::TextElideMode mode, qreal width, int flags = 0) const

如果字符串 text 比指定的宽度 width 宽,则返回字符串的缩略版本(即包含 "..." 的字符串)。否则,返回原始字符串。

mode 参数指定文本是在左侧(例如,"..."tech),中间(例如,"Tr...ch")还是右侧(例如,"Trol...")省略。

宽度 width 以像素为单位指定,而不是以字符为单位。

参数 flags 是可选的,目前仅支持 Qt::TextShowMnemonic 作为值。

省略标记遵循 布局方向。例如,如果 modeQt::ElideLeft,则在从右到左的布局中为文本右侧的文本,如果 modeQt::ElideRight,则在文本左侧。

qreal QFontMetricsF::fontDpi() const

返回字体的 DPI。

qreal QFontMetricsF::height() const

返回字体的高度。

此值始终等于ascent() + descent()。

另请参阅leading()和lineSpacing()。

qreal QFontMetricsF::horizontalAdvance(const QString &text, int length = -1) const

返回文本中前length个字符的水平推进像素值。如果length为负(默认值),则使用整个字符串。即使length非常短,也会分析文本的整个长度。

推进是在text后面绘制下一个字符的合适距离。

另请参阅boundingRect()。

qreal QFontMetricsF::horizontalAdvance(QChar ch) const

这是一个重载函数。

Bearings

以像素为单位返回字符ch的水平推进。这是ch后面绘制下一个字符的合适距离。

一些度量标准在右侧的图像中进行了描述。中央深色矩形覆盖每个字符的逻辑horizontalAdvance()。外层浅色矩形覆盖每个字符的leftBearing()和rightBearing()。请注意,在这个特定字体中,“f”的两个bearing值都是负数,而“o”的两个bearing值都是正数。

警告:此函数对于中间包含阿拉伯字符或非间距标记的字符串会产生错误的结果,因为在处理字符串时无法考虑标记的形状和定位。在实现交互式文本控制时,请改用QTextLayout

另请参阅boundingRect()。

[since 6.3] qreal QFontMetricsF::horizontalAdvance(const QString &text, const QTextOption &option) const

使用option设置布局的文本后,返回文本的水平推进像素值。

推进是在text后面绘制下一个字符的合适距离。

此函数是在 Qt 6.3 中引入的。

另请参阅boundingRect()。

bool QFontMetricsF::inFont(QChar ch) const

如果字符ch是字体中的有效字符,则返回true;否则返回false

bool QFontMetricsF::inFontUcs4(uint ch) const

如果给定的字符ch由UCS-4/UTF-32编码,且是字体中的有效字符,则返回true;否则返回false

qreal QFontMetricsF::leading() const

返回字体的高度。

这是自然行间距。

另请参阅 height() 以及 lineSpacing().

qreal QFontMetricsF::leftBearing(QChar ch) const

返回字体中字符 ch 的左边界。

左边界是指字符最左侧像素点与字符逻辑起点的水平距离。如果字符的像素延伸到了逻辑起点的左侧,则此值将可能为负。

有关此度量标准的图形说明,请参阅 horizontalAdvance().

另请参阅 rightBearing()、minLeftBearing() 以及 horizontalAdvance().

qreal QFontMetricsF::lineSpacing() const

返回从一个基线到下一个基线的距离。

该值始终等于 leading() + height().

另请参阅 height() 以及 leading().

qreal QFontMetricsF::lineWidth() const

返回下划线和删除线的宽度,并考虑了字体的点大小。

另请参阅 underlinePos()、overlinePos() 以及 strikeOutPos().

qreal QFontMetricsF::maxWidth() const

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

qreal QFontMetricsF::minLeftBearing() const

返回字体的最小左边界。

这是字体中所有字符的最小的 leftBearing(char)。

请注意,如果字体较大,此函数可能会导致运行速度非常慢。

另请参阅 minRightBearing() 以及 leftBearing().

qreal QFontMetricsF::minRightBearing() const

返回字体的最小右边界。

这是字体中所有字符的最小的 rightBearing(char)。

请注意,如果字体较大,此函数可能会导致运行速度非常慢。

另请参阅 minLeftBearing() 以及 rightBearing().

qreal QFontMetricsF::overlinePos() const

返回从基线到画上横线的位置的距离。

另请参阅 underlinePos()、strikeOutPos() 以及 lineWidth().

qreal QFontMetricsF::rightBearing(QChar ch) const

返回字体中字符 ch 的右边界。

右侧轴承是字符最右侧像素相对于后续字符逻辑原点的左侧距离。如果字符的像素延伸到horizontalAdvance()字符的右侧,则此值是负的。

有关此度量标准的图形说明,请参阅 horizontalAdvance().

另请参阅leftBearing(),minRightBearing()和horizontalAdvance()。

QSizeF QFontMetricsF::size(int flags, const QString &text, int tabStops = 0, int *tabArray = nullptr) const

返回给定text中字符的像素大小。

flags参数是以下标志的按位或操作

这些标志定义在Qt::TextFlag枚举中。

如果 Qt::TextExpandTabsflags 中被设置,将使用以下行为来解析文本中的制表符。

  • 如果 tabArray 非空,它指定了一个文本中制表符的 0 结束的像素位置序列。
  • 如果 tabStops 非零,它将作为制表符间距(以像素为单位)使用。

换行符被处理为行中断。

注意:尽管实际字符高度不同,但"Yes"和"yes"的边界矩形高度是相同的。

另请参阅boundingRect()。

qreal QFontMetricsF::strikeOutPos() const

返回基线到应绘制删除线的位置的距离。

另请参阅underlinePos(),overlinePos()和lineWidth()。

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

other交换此字体度量实例。此函数非常快且从不失败。

QRectF QFontMetricsF::tightBoundingRect(const QString &text) const

返回围绕由text指定的字符串中字符的紧密边界矩形。边界矩形始终至少覆盖文本绘制在(0, 0)时的像素集。

请注意,包围矩形可能会延伸到 (0, 0) 的左侧,例如对于斜体字体,并且返回矩形的宽度可能与 horizontalAdvance() 方法返回的值不同。

如果您想了解字符串的进阶宽度(用于并列布局字符串),请使用 horizontalAdvance()。

换行符被作为普通字符处理,而不是作为行分隔符。

另请参阅horizontalAdvance(),height()和boundingRect()。

[since 6.3] QRectF QFontMetricsF::tightBoundingRect(const QString &text, const QTextOption &option) const

返回使用option布局的由text指定的字符串中字符的紧密边界矩形。边界矩形始终至少覆盖文本绘制在(0,0)时的像素集。

请注意,包围矩形可能会延伸到 (0, 0) 的左侧,例如对于斜体字体,并且返回矩形的宽度可能与 horizontalAdvance() 方法返回的值不同。

如果您想了解字符串的进阶宽度(用于并列布局字符串),请使用 horizontalAdvance()。

换行符被作为普通字符处理,而不是作为行分隔符。

此函数是在 Qt 6.3 中引入的。

另请参阅horizontalAdvance(),height()和boundingRect()。

qreal QFontMetricsF::underlinePos() const

返回基线到应绘制下划线位置的距离。

另请参阅overlinePos(),strikeOutPos()和lineWidth()。

qreal QFontMetricsF::xHeight() const

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

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

这是一个重载函数。

如果字体度量与 other 的字体度量不相等,则返回 true;否则返回 false

另请参阅 operator==

QFontMetricsF &QFontMetricsF::operator=(const QFontMetricsF &fm)

将字体度量 fm 分配给此字体度量对象。

QFontMetricsF &QFontMetricsF::operator=(const QFontMetrics &other)

other 分配给此对象。

[noexcept] QFontMetricsF &QFontMetricsF::operator=(QFontMetricsF &&other)

other 移动分配给此 QFontMetricsF 实例。

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

如果字体度量等于 other 的字体度量,则返回 true;否则返回 false

如果两个字体度量是由相同的 QFont 构造的,且它们构造的绘制设备被认为是兼容的,则认为这两个字体度量是相等的。

© 2024 The Qt Company Ltd。本文档中包含的贡献版权属于各自的所有者。本文档是根据自由软件基金会发布的 GNU 自由文档许可协议版本 1.3 许可的。Qt 及相关商标是芬兰 The Qt Company Ltd. 和/或在全世界其他国家的商标。所有其他商标均属于其各自所有者。