QFontMetricsF 类
QFontMetricsF 类提供字体度量信息。 更多信息...
头文件 | #include <QFontMetricsF> |
CMake | find_package(Qt6 REQUIRED COMPONENTS Gui) target_link_libraries(mytarget PRIVATE Qt6::Gui) |
qmake | QT += gui |
- 所有成员的列表,包括继承的成员
- QFontMetricsF 是 绘制类 和 隐式共享类 的一部分。
注意:本类中所有函数都是 可重入的。
公共函数
QFontMetricsF(const QFont &font) | |
QFontMetricsF(const QFont &font, const QPaintDevice *paintdevice) | |
QFontMetricsF(const QFontMetrics &fontMetrics) | |
QFontMetricsF(const QFontMetricsF &fm) | |
~QFontMetricsF() | |
qreal | ascent() const |
qreal | averageCharWidth() const |
QRectF | boundingRect(const QString &text) const |
(since 6.3) QRectF | boundingRect(const QString &text, const QTextOption &option) const |
QRectF | boundingRect(QChar ch) const |
QRectF | boundingRect(const QRectF &rect, int flags, const QString &text, int tabStops = 0, int *tabArray = nullptr) const |
qreal | capHeight() const |
qreal | descent() const |
QString | elidedText(const QString &text, Qt::TextElideMode mode, qreal width, int flags = 0) const |
qreal | fontDpi() const |
qreal | height() const |
qreal | horizontalAdvance(const QString &text, int length = -1) const |
qreal | horizontalAdvance(QChar ch) const |
(since 6.3) qreal | horizontalAdvance(const QString &text, const QTextOption &option) const |
bool | inFont(QChar ch) const |
bool | inFontUcs4(uint ch) const |
qreal | leading() const |
qreal | leftBearing(QChar ch) const |
qreal | lineSpacing() const |
qreal | lineWidth() 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 |
qreal | x高度() 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();
另请参阅QFont,QFontInfo 和 QFontDatabase。
成员函数文档
[显式]
QFontMetricsF::QFontMetricsF(const QFont &font)
为 font 构造一个字体度量对象。
字体度量将与用于创建 font 的绘图设备兼容。
字体度量对象在其创建时存储传入构造函数的字体信息,如果后来字体属性发生了改变,该对象将不会更新。
使用函数 QFontMetricsF(const QFont &, QPaintDevice *) 获取与特定绘画设备兼容的字体度量。
QFontMetricsF::QFontMetricsF(const QFont &font, const QPaintDevice *paintdevice)
为 font 和 paintdevice 构造字体度量对象。
该字体度量将与传入的 paintdevice 相兼容。如果 paintdevice 为 nullptr
,则度量将为屏幕兼容,即使用该字体在控件或位图上绘制文本时得到的度量,而不是在 QWidget 或 QPicture 或 QPrinter 上。
字体度量对象在其创建时存储传入构造函数的字体信息,如果后来字体属性发生了改变,该对象将不会更新。
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指定的边界矩形时将覆盖的像素集。如果rect是nullptr
对象的引用,例如在传递默认构造的QRectF时,边界矩形将不会约束自身到大小。
flags参数是以下标志的按位或操作
- Qt::AlignLeft则与左边框对齐,但对于阿拉伯语和希伯来语而言则与右边对齐。
- Qt::AlignRight则与右边框对齐,但对于阿拉伯语和希伯来语而言则与左边对齐。
- Qt::AlignJustify生成对齐文本。
- Qt::AlignHCenter进行水平居中对齐。
- Qt::AlignTop则与顶部边框对齐。
- Qt::AlignBottom则与底部边框对齐。
- Qt::AlignVCenter垂直居中对齐
- Qt::AlignCenter (==
Qt::AlignHCenter | Qt::AlignVCenter
) - Qt::TextSingleLine忽略文本中的换行符。
- Qt::TextExpandTabs扩展制表符(见下文)
- Qt::TextShowMnemonic将 "&x" 解释为 x;即,带有下划线。
- Qt::TextWordWrap根据矩形断开文本。
Qt::Horizontal对齐默认为 Qt::AlignLeft 且垂直对齐默认为 Qt::AlignTop。
如果设置了多个水平或多个垂直对齐标志,则结果对齐是未定义的。
这些标志定义在 Qt::AlignmentFlag 中。
如果 Qt::TextExpandTabs 在 flags 中被设置,将使用以下行为来解析文本中的制表符。
- 如果 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 作为值。
省略标记遵循 布局方向。例如,如果 mode 是 Qt::ElideLeft
,则在从右到左的布局中为文本右侧的文本,如果 mode 是 Qt::ElideRight
,则在文本左侧。
qreal QFontMetricsF::fontDpi() const
返回字体的 DPI。
qreal QFontMetricsF::height() const
返回字体的高度。
另请参阅leading()和lineSpacing()。
qreal QFontMetricsF::horizontalAdvance(const QString &text, int length = -1) const
返回文本中前length个字符的水平推进像素值。如果length为负(默认值),则使用整个字符串。即使length非常短,也会分析文本的整个长度。
推进是在text后面绘制下一个字符的合适距离。
另请参阅boundingRect()。
qreal QFontMetricsF::horizontalAdvance(QChar ch) const
这是一个重载函数。
以像素为单位返回字符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
返回从一个基线到下一个基线的距离。
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::TextSingleLine忽略换行符。
- Qt::TextExpandTabs扩展制表符(见下文)
- Qt::TextShowMnemonic将 "&x" 解释为 x;即,带有下划线。
- Qt::TextWordWrap根据矩形断开文本。
这些标志定义在Qt::TextFlag枚举中。
如果 Qt::TextExpandTabs 在 flags 中被设置,将使用以下行为来解析文本中的制表符。
- 如果 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. 和/或在全世界其他国家的商标。所有其他商标均属于其各自所有者。