QFontMetricsF Class
QFontMetricsF 类提供字体度量信息。更多
Header: | #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 QFontMetrics &fontMetrics) | |
QFontMetricsF(const QFont &font, const QPaintDevice *paintdevice) | |
QFontMetricsF(const QFontMetricsF &fm) | |
~QFontMetricsF() | |
qreal | ascent() const |
qreal | averageCharWidth() const |
QRectF | boundingRect(QChar ch) const |
QRectF | boundingRect(const QString &text) const |
(since 6.3) QRectF | boundingRect(const QString &text, const QTextOption &option) 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 |
(since 6.3) qreal | horizontalAdvance(const QString &text, const QTextOption &option) const |
qreal | horizontalAdvance(const QString &text, int length = -1) const |
qreal | horizontalAdvance(QChar ch) 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 | maxWidth() const |
qreal | minLeftBearing() const |
qreal | minRightBearing() const |
qreal | overlinePos() const |
qreal | rightBearing(QChar ch) const |
QSizeF | size(int flags, const QString &text, int tabStops = 0, int *tabArray = nullptr) const |
qreal | strikeOutPos() const |
void | swap(QFontMetricsF &other) |
QRectF | tightBoundingRect(const QString &text) const |
(since 6.3) QRectF | tightBoundingRect(const QString &text, const QTextOption &option) const |
qreal | underlinePos() const |
qreal | xHeight() const |
bool | operator!=(const QFontMetricsF &other) const |
QFontMetricsF & | operator=(QFontMetricsF &&other) |
QFontMetricsF & | operator=(const QFontMetrics &other) |
QFontMetricsF & | operator=(const QFontMetricsF &fm) |
bool | operator==(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 。
成员函数文档
[explicit]
QFontMetricsF::QFontMetricsF(const QFont &font)
为font 构建字体度量对象。
字体度量标准将与用于创建font 的 paintdevice 兼容。
字体度量对象保存创建时在构造函数中传递的字体信息,如果字体的属性在以后发生变化,该信息将不会更新。
使用 QFontMetricsF(constQFont &,QPaintDevice *) 可获取与特定绘画设备兼容的字体度量值。
QFontMetricsF::QFontMetricsF(const QFontMetrics &fontMetrics)
根据给定的fontMetrics 对象,以浮点精度构造字体度量对象。
QFontMetricsF::QFontMetricsF(const QFont &font, const QPaintDevice *paintdevice)
为font 和paintdevice 构建字体度量对象。
字体指标将与所传递的 paintdevice 兼容。如果paintdevice 是nullptr
,指标将与屏幕兼容,即在widgets 或pixmaps 上使用该字体绘制文本时得到的指标,而不是在QPicture 或QPrinter 上得到的指标。
字体度量值对象保存的是创建时在构造函数中传递的字体信息,如果字体的属性在以后发生变化,这些信息将不会更新。
QFontMetricsF::QFontMetricsF(const QFontMetricsF &fm)
构造fm 的副本。
[noexcept]
QFontMetricsF::~QFontMetricsF()
销毁字体度量对象并释放所有已分配的资源。
qreal QFontMetricsF::ascent() const
返回字体的坡度。
字体的坡度是从基线到字符最高位置的距离。在实践中,一些字体设计者会打破这一规则,例如在一个字符的顶部添加多个重音,或为了适应某个字符,因此这个值有可能太小(虽然很少见)。
另请参见 descent()。
qreal QFontMetricsF::averageCharWidth() const
返回字体中字形的平均宽度。
QRectF QFontMetricsF::boundingRect(QChar ch) const
返回ch 字符相对于基线最左点的边界矩形。
请注意,边界矩形可能会扩展到(0,0)的左侧,例如斜体字体,而且文本输出可能会覆盖边界矩形中的所有像素。
请注意,矩形通常在基线上下都有延伸。
另请参见 horizontalAdvance()。
QRectF QFontMetricsF::boundingRect(const QString &text) const
返回text 所指定字符串中字符的边界矩形。边界矩形总是至少覆盖文本在 (0, 0) 处绘制时所覆盖的像素集。
请注意,边界矩形可能会扩展到(0,0)的左侧,例如斜体字体,而且返回的矩形宽度可能与horizontalAdvance() 方法返回的宽度不同。
如果您想知道字符串的预宽度(以便将一组字符串排列在一起),请使用horizontalAdvance() 代替。
换行符将作为普通字符而非换行符处理。
边界矩形的高度至少与height() 返回的值一样大。
另请参阅 horizontalAdvance()、height() 和QPainter::boundingRect()。
[since 6.3]
QRectF QFontMetricsF::boundingRect(const QString &text, const QTextOption &option) const
返回text 所指定字符串中字符的边界矩形,该矩形使用option 布局。边界矩形总是至少覆盖文本在 (0, 0) 处绘制时所覆盖的像素集。
请注意,边界矩形可能会扩展到 (0, 0) 的左侧,例如斜体字体,而且返回的矩形宽度可能与horizontalAdvance() 方法返回的宽度不同。
如果您想知道字符串的预宽度(以便将一组字符串排列在一起),请使用horizontalAdvance() 代替。
换行符将作为普通字符而非换行符处理。
边界矩形的高度至少与height() 返回的值一样大。
此函数在 Qt 6.3 中引入。
另请参阅 horizontalAdvance()、height() 和QPainter::boundingRect()。
QRectF QFontMetricsF::boundingRect(const QRectF &rect, int flags, const QString &text, int tabStops = 0, int *tabArray = nullptr) const
这是一个重载函数。
返回给定text 中字符的边界矩形。这是文本在受限于rect 指定的边界矩形的情况下绘制时所覆盖的像素集合。如果rect 是对nullptr
对象的引用,例如在传递默认构造的QRectF 时,则边界矩形不会约束自己的大小。
flags 参数是以下标志的位向 OR:
- 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 "的边界矩形高度是相同的。
该函数返回的边界矩形比更简单的 boundingRect() 函数计算的边界矩形要大一些。该函数使用maximum left 和right 字体方位,这是多行文本正确对齐所必需的。此外,fontHeight() 和lineSpacing() 用于计算高度,而不是单个字符的高度。
另请参见 horizontalAdvance()、QPainter::boundingRect() 和Qt::Alignment 。
qreal QFontMetricsF::capHeight() const
返回字体的上限高度。
字体的上限高度是大写字母高于基线的高度。特别是扁平大写字母(如 H 或 I)的上限高度,而不是圆形字母(如 O)或尖形字母(如 A)的上限高度,这两种字母都可能显示超调。
另请参见 ascent()。
qreal QFontMetricsF::descent() const
返回字体的下降值。
下降值是从基线到字符延伸到的最低点的距离。(请注意,这与 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 作为值。
消除标记跟随layoutdirection 。例如,如果mode 是Qt::ElideLeft
,它将位于从右到左布局的文本的右侧;如果mode 是Qt::ElideRight
,它将位于文本的左侧。
qreal QFontMetricsF::fontDpi() const
返回字体 DPI。
qreal QFontMetricsF::height() const
返回字体的高度。
另请参阅 leading() 和lineSpacing()。
[since 6.3]
qreal QFontMetricsF::horizontalAdvance(const QString &text, const QTextOption &option) const
使用option 返回text 布局的水平提前量(以像素为单位)。
提前量是在text 之后绘制后续字符的适当距离。
此函数在 Qt 6.3 中引入。
另请参阅 boundingRect()。
qreal QFontMetricsF::horizontalAdvance(const QString &text, int length = -1) const
以像素为单位返回text 第一个length 字符的水平前进值。如果length 为负数(默认值),则使用整个字符串。即使length 短得多,也会分析text 的整个长度。
提前量是在text 之后绘制后续字符的适当距离。
另请参阅 boundingRect() 。
qreal QFontMetricsF::horizontalAdvance(QChar ch) const
这是一个重载函数。
返回ch 字符的水平前进距离,单位为像素。这个距离适合在ch 之后绘制后续字符。
右边的图片描述了一些度量指标。中央的深色矩形覆盖了每个字符的逻辑水平前进()距离。外部的浅色矩形覆盖了每个字符的leftBearing() 和rightBearing() 。请注意,在这种特殊字体中,"f "的方位都是负的,而 "o "的方位都是正的。
警告: 对于阿拉伯字符或字符串中间的非间距标记,该函数将产生不正确的结果,因为无法考虑处理字符串时发生的字形整形和标记定位。在执行交互式文本控制时,请使用QTextLayout 。
另请参见 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 参数是下列标志的位相 OR:
- 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
返回text 所指定字符串周围的紧包围矩形,该矩形使用option 布局。如果文本绘制在 (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==() 。
[noexcept]
QFontMetricsF &QFontMetricsF::operator=(QFontMetricsF &&other)
Move-assignsother 到此QFontMetricsF 实例。
QFontMetricsF &QFontMetricsF::operator=(const QFontMetrics &other)
为该对象指定other 。
QFontMetricsF &QFontMetricsF::operator=(const QFontMetricsF &fm)
将字体度量fm 分配给此字体度量对象。
bool QFontMetricsF::operator==(const QFontMetricsF &other) const
如果字体度量值等于other 字体度量值,则返回true
;否则返回false
。
如果两个字体度量值是由相同的QFont 构建的,并且它们所适用的喷涂设备被认为是兼容的,则这两个字体度量值被认为是相等的。
© 2025 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.