PySide6.QtGui.QFontMetrics

class QFontMetrics

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

概要

方法

注意

本文档可能包含从C++自动翻译到Python的代码片段。我们始终欢迎对代码片段翻译的贡献。如果您发现翻译问题,您也可以通过在我们的https:/bugreports.qt.io/projects/PYSIDE上创建工单来告知我们。

详细描述

警告

本节包含从C++自动翻译到Python的代码片段,可能包含错误。

QFontMetrics 函数用于计算给定字体的字符和字符串的大小。有三种方法可以创建 QFontMetrics 对象:

  1. 使用QFont调用QFontMetrics构造函数会创建一个与屏幕兼容的字体的字体度量对象,即该字体不能是打印机字体。如果稍后更改字体,字体度量对象不会更新。

    (注意:如果使用打印机字体,返回的值可能不准确。打印机字体并不总是可访问的,因此如果提供了打印机字体,将使用最接近的屏幕字体。)

  2. QWidget::fontMetrics() 返回小部件字体的字体度量。这等同于 QFontMetrics (widget->font())。如果小部件的字体后来被更改,字体度量对象不会更新。

  3. fontMetrics() 返回画家的当前字体的字体度量。如果画家的字体后来被更改,字体度量对象不会更新。

一旦创建,该对象提供函数来访问字体的各个指标、其字符以及以该字体渲染的字符串。

有几个函数用于操作字体:ascent()descent()height()leading()lineSpacing()返回字体的基本大小属性。underlinePos()overlinePos()strikeOutPos()lineWidth()函数返回用于下划线、上划线或删除线的线条属性。这些函数都非常快速。

还有一些函数用于操作字体中的字形集:minLeftBearing()minRightBearing()maxWidth()。这些函数必然较慢,我们建议尽可能避免使用它们。

对于每个字符,你可以获取它的horizontalAdvance()leftBearing()rightBearing(),并使用inFont()来检查它是否在字体中。你也可以将字符视为字符串,并在其上使用字符串函数。

字符串函数包括horizontalAdvance(),用于返回字符串的宽度(以像素或打印机的点为单位),boundingRect(),用于返回一个足够大的矩形以包含渲染的字符串,以及size(),用于返回该矩形的大小。

注意

前进宽度可能与实际渲染文本的宽度不同。它指的是从字符串的原点到您将附加额外字符的位置的距离。由于文本可能具有悬垂(例如在斜体字体的情况下)或字符之间的填充,前进宽度可能比文本的实际渲染更小或更大。这被称为文本的右轴承。

示例:

font = QFont("times", 24)
fm = QFontMetrics(font)
pixelsWide = fm.horizontalAdvance("What's the advance width of self text?")
pixelsHigh = fm.height()
__init__(font)
Parameters:

字体QFont

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

字体指标将与用于创建 font 的绘制设备兼容。

字体度量对象保存了在创建时传递给构造函数的字体信息,如果之后字体的属性发生变化,该对象不会更新。

使用 QFontMetrics (const QFont &, QPaintDevice *) 来获取与特定绘图设备兼容的字体度量。

__init__(fm)
Parameters:

fmQFontMetrics

构造fm的副本。

__init__(font, pd)
Parameters:

fontpaintdevice构建一个字体度量对象。

字体度量将与传递的paintdevice兼容。如果paintdeviceNone,则度量将与屏幕兼容,即在使用字体在小部件或pixmaps上绘制文本时获得的度量,而不是在QPicture或QPrinter上。

字体度量对象保存了在创建时传递给构造函数的字体信息,如果之后字体的属性发生变化,该对象不会更新。

ascent()
Return type:

整数

返回字体的上升高度。

字体的上升是从基线到字符延伸到的最高位置的距离。实际上,一些字体设计师会打破这一规则,例如当他们在一个字符上放置多个重音符号,或者为了适应某个特定字符时,因此这个值可能会太小(尽管这种情况很少见)。

另请参阅

descent()

averageCharWidth()
Return type:

整数

返回字体中字形(glyphs)的平均宽度。

boundingRect(text)
Parameters:

文本 – str

Return type:

QRect

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

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

如果你想知道字符串的提前宽度(以便将一组字符串并排放置),请使用horizontalAdvance()代替。

换行符被当作普通字符处理,作为换行符。

边界矩形的高度至少与height()返回的值一样大。

boundingRect(text, textOption)
Parameters:
Return type:

QRect

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

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

如果你想知道字符串的提前宽度(以便将一组字符串并排放置),请使用horizontalAdvance()代替。

换行符被当作普通字符处理,作为换行符。

边界矩形的高度至少与height()返回的值一样大。

boundingRect(r, flags, text[, tabstops=0[, tabarray=None]])
Parameters:
  • rQRect

  • flags – int

  • 文本 – str

  • tabstops – int

  • tabarray – int

Return type:

QRect

这是一个重载函数。

返回由text指定的字符串中字符的边界矩形,这是如果文本在(0, 0)处绘制时将覆盖的像素集合。绘制以及边界矩形被限制在矩形rect内。

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。

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

如果在flags中设置了Qt::TextExpandTabs,那么:如果tabArray不为空,它指定了一个以0结尾的像素位置序列用于制表符;否则如果tabStops不为零,它将被用作制表符间距(以像素为单位)。

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

换行符被处理为换行。

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

此函数返回的边界矩形比由更简单的boundingRect()函数计算的矩形稍大。此函数使用maximum leftright字体轴承,这对于多行文本正确对齐是必要的。此外,使用fontHeight()和lineSpacing()来计算高度,而不是单个字符的高度。

另请参阅

horizontalAdvance() boundingRect() Alignment

boundingRect(x, y, w, h, flags, text[, tabstops=0[, tabarray=None]])
Parameters:
  • x – 整数

  • y – 整数

  • w – 整数

  • h – 整数

  • flags – int

  • 文本 – str

  • tabstops – int

  • tabarray – int

Return type:

QRect

这是一个重载函数。

返回给定text在由xy坐标、widthheight指定的矩形内的边界矩形。

如果在flags中设置了Qt::TextExpandTabs并且tabArray不为空,它指定了一个以0结尾的像素位置序列用于制表符;否则,如果tabStops不为零,它将被用作制表符间距(以像素为单位)。

boundingRectChar(arg__1)
Parameters:

arg__1QChar

Return type:

QRect

capHeight()
Return type:

整数

返回字体的帽高。

字体的帽高是指大写字母在基线以上的高度。具体来说,它是指那些平坦的大写字母的高度——比如H或I——与圆形字母如O或尖形字母如A相对,后两者可能会显示超出部分。

另请参阅

ascent()

descent()
Return type:

整数

返回字体的下降部分。

下降是从基线到字符延伸到的最低点的距离。实际上,一些字体设计师会打破这一规则,例如为了适应某个特定字符,因此这个值可能会太小(尽管这种情况很少见)。

另请参阅

ascent()

elidedText(text, mode, width[, flags=0])
Parameters:
  • 文本 – str

  • modeTextElideMode

  • width – int

  • flags – int

Return type:

字符串

如果字符串 text 的宽度超过 width,则返回字符串的省略版本(即包含“…”的字符串)。否则,返回原始字符串。

mode 参数指定文本是在左侧(例如,“…tech”)、中间(例如,“Tr…ch”)还是右侧(例如,“Trol…”)进行省略。

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

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

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

fontDpi()
Return type:

浮点数

返回字体DPI。

height()
Return type:

整数

返回字体的高度。

这总是等于 ascent() + descent()

另请参阅

leading() lineSpacing()

horizontalAdvance(text, textOption)
Parameters:
Return type:

整数

返回使用option布局的text的水平前进像素数。

前进距离是在绘制text之后绘制后续字符的适当距离。

另请参阅

boundingRect()

horizontalAdvance(text[, len=-1])
Parameters:
  • 文本 – str

  • len – int

Return type:

整数

返回text的前len个字符的水平前进像素数。如果len为负数(默认值),则使用整个字符串。即使len明显较短,也会分析text的整个长度。

这是绘制text后下一个字符的适当距离。

另请参阅

boundingRect()

horizontalAdvanceChar(arg__1)
Parameters:

arg__1QChar

Return type:

整数

inFont(ch)
Parameters:

chQChar

Return type:

布尔

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

inFontUcs4(ucs4)
Parameters:

ucs4 – 整数

Return type:

布尔

如果以UCS-4/UTF-32编码的字符ucs4是字体中的有效字符,则返回true;否则返回false

leading()
Return type:

整数

返回字体的行距。

这是自然的行间距。

另请参阅

height() lineSpacing()

leftBearing(ch)
Parameters:

chQChar

Return type:

整数

返回字体中字符 ch 的左间距。

左轴承是字符最左侧像素与字符逻辑原点之间的向右距离。如果字符的像素延伸到逻辑原点的左侧,则该值为负。

请参见horizontalAdvance()以获取此指标的图形描述。

lineSpacing()
Return type:

整数

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

这个值总是等于 leading() + height()

另请参阅

height() leading()

lineWidth()
Return type:

整数

返回下划线和删除线的宽度,根据字体的点大小进行调整。

maxWidth()
Return type:

整数

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

minLeftBearing()
Return type:

整数

返回字体的最小左间距。

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

请注意,如果字体很大,这个函数可能会非常慢。

minRightBearing()
Return type:

整数

返回字体的最小右侧间距。

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

请注意,如果字体很大,这个函数可能会非常慢。

__ne__(other)
Parameters:

其他QFontMetrics

Return type:

布尔

如果 other 不等于此对象,则返回 true;否则返回 false

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

另请参阅

operator==()

__eq__(other)
Parameters:

其他QFontMetrics

Return type:

布尔

如果 other 等于此对象,则返回 true;否则返回 false

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

另请参阅

operator!=()

overlinePos()
Return type:

整数

返回从基线到应绘制上划线的距离。

rightBearing(ch)
Parameters:

chQChar

Return type:

整数

返回字体中字符 ch 的右侧间距。

右侧间距是字符最右侧像素到后续字符逻辑原点的向左距离。如果字符的像素延伸到字符的horizontalAdvance()右侧,则该值为负。

请参见horizontalAdvance()以获取此指标的图形描述。

size(flags, str[, tabstops=0[, tabarray=None]])
Parameters:
  • flags – int

  • str – str

  • tabstops – int

  • tabarray – int

Return type:

QSize

返回text的像素大小。

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

  • Qt::TextSingleLine 忽略换行符。

  • Qt::TextExpandTabs 扩展制表符(见下文)

  • Qt::TextShowMnemonic 将“&x”解释为 x;即,带下划线。

  • Qt::TextWordWrap 将文本换行以适应矩形。

如果在flags中设置了Qt::TextExpandTabs,那么:如果tabArray不为空,它指定了一个以0结尾的像素位置序列用于制表符;否则如果tabStops不为零,它将被用作制表符间距(以像素为单位)。

换行符被处理为换行。

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

另请参阅

boundingRect()

strikeOutPos()
Return type:

整数

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

swap(other)
Parameters:

其他QFontMetrics

将此字体度量实例与 other 交换。此函数非常快且永远不会失败。

tightBoundingRect(text)
Parameters:

文本 – str

Return type:

QRect

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

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

如果你想知道字符串的提前宽度(以便将一组字符串并排放置),请使用horizontalAdvance()代替。

换行符被当作普通字符处理,作为换行符。

tightBoundingRect(text, textOption)
Parameters:
Return type:

QRect

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

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

如果你想知道字符串的提前宽度(以便将一组字符串并排放置),请使用horizontalAdvance()代替。

换行符被当作普通字符处理,作为换行符。

underlinePos()
Return type:

整数

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

xHeight()
Return type:

整数

返回字体的‘x’高度。这通常但不总是与字符‘x’的高度相同。