class QFontMetrics#

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

概要#

方法#

注意

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

详细描述#

警告

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

QFontMetrics 函数计算给定字体的字符和字符串的大小。您可以通过三种方式创建一个 QFontMetrics 对象

  1. 使用一个 QFontMetrics 构造器和一个 QFont 对象来创建一个屏幕兼容字体字体度量对象,即该字体不能是打印字体。如果之后更改了字体,字体度量对象将 被更新。

    (备注:如果您使用打印字体,返回的值可能不准确。打印字体可能不总是可用的,因此如果没有提供打印字体,则使用最近的屏幕字体。)

  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, pd)#
参数:

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

字体测量将与传入的画布设备兼容。如果 paintdeviceNone,则测量将是屏幕兼容的,即使用此字体在窗口小部件或 pixmaps 上绘制文本时获得的度量,而不是在 QPicture 或 QPrinter 上。

该字体测量对象在其被创建时保持传递给构造函数的字体信息,并且不会更新字体属性更改后的信息。

__init__(arg__1)
参数:

arg__1QFont

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

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

该字体测量对象在其被创建时保持传递给构造函数的字体信息,并且不会更新字体属性更改后的信息。

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

__init__(arg__1)
参数:

arg__1QFontMetrics

构造对象fm的副本。

ascent()#
返回类型::

int

返回字体的升序。

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

另请参阅

descent()

averageCharWidth()#
返回类型::

int

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

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

  • flags – int

  • text – 字符串

  • tabstops – int

  • tabarray – int

返回类型::

QRect

这是一个重载函数。

返回指定字符串中字符的边界矩形,即文本绘制在(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::AlignLeft,垂直对齐为 Qt::AlignTop。

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

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

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

换行符被视为行断。

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

此函数返回的边界矩形略大于简单的 boundingRect() 函数计算的边界矩形。此函数使用 maximum leftright 字体外侧作为多行文本正确对齐所必需的。此外,fontHeight() 和 lineSpacing() 用于计算高度,而不是单个字符的高度。

另请参阅

horizontalAdvance() boundingRect() Alignment

boundingRect(text)
参数:

text – 字符串

返回类型::

QRect

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

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

如果您想了解字符串的进阶宽度(用于将字符串并排排列),请使用 horizontalAdvance() 而不是。

换行符被视为普通字符,不是行断。

包围盒的高度至少和由height()返回的值一样。

boundingRect(text, textOption)
参数:
返回类型::

QRect

返回使用option排版指定的text字符串的字符的包围矩形。包围矩形始终覆盖至少在(0, 0)位置绘制的文本将覆盖的像素集。

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

如果您想了解字符串的进阶宽度(用于将字符串并排排列),请使用 horizontalAdvance() 而不是。

换行符被视为普通字符,不是行断。

包围盒的高度至少和由height()返回的值一样。

boundingRect(x, y, w, h, flags, text[, tabstops=0[, tabarray=None]])
参数:
  • x - int

  • y - int

  • w - int

  • h - int

  • flags – int

  • text – 字符串

  • tabstops – int

  • tabarray – int

返回类型::

QRect

这是一个重载函数。

返回在由x和y坐标、宽度(w)和高度(h)指定的矩形内给定text的包围矩形。

如果flags中设置了Qt::TextExpandTabs,且tabArray非空,它指定了一个用像素位置标记的0结束的制表符序列;否则,如果tabStops非零,它被用作制表符间隔(以像素为单位)。

boundingRectChar(arg__1)#
参数:

arg__1 - QChar

返回类型::

QRect

capHeight()#
返回类型::

int

返回字体的刻度高度。

字体的刻度高度是基线以上大写字母的高度。具体来说是平头大写字母(如H或I)的高度,而不是圆头字母(如O)或尖头字母(如A)的高度,这两者都可能显示超出。

另请参阅

ascent()

descent()#
返回类型::

int

返回字体的下降量。

下降是指基准线到降低的点之间字符伸展的距离。在实际中,一些字体设计师会违反这一规则,例如为了适应某个字符,所以这个值过小是可能的(尽管很少见)。

另请参阅

ascent()

elidedText(text, mode, width[, flags=0])#
参数:
  • text – 字符串

  • 模式TextElideMode

  • 宽度 – int

  • flags – int

返回类型::

str

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

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

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

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

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

fontDpi()#
返回类型::

float

返回字体的DPI。

height()#
返回类型::

int

返回字体的高度。

这始终等于 ascent() + descent()

另请参阅

leading() lineSpacing()

horizontalAdvance(arg__1, textOption)#
参数:
返回类型::

int

返回使用 option 布局 text 的像素水平延伸。

这个延伸是用于在 text 后绘制后续字符的正确距离。

另请参阅

boundingRect()

horizontalAdvance(arg__1[, len=-1])
参数:
  • 参数 – str

  • len – int

返回类型::

int

返回文本中前len个字符的横向像素偏移量。如果len为负值(默认值),则使用整个字符串。即使len相对较短,也会分析text的整个长度。

这是在text之后绘制字符的适当距离。

另请参阅

boundingRect()

horizontalAdvanceChar(arg__1)#
参数:

arg__1 - QChar

返回类型::

int

inFont(arg__1)#
参数:

arg__1 - QChar

返回类型::

bool

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

inFontUcs4(ucs4)#
参数:

ucs4 – int

返回类型::

bool

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

leading()#
返回类型::

int

返回字体的leading。

这是自然行间距。

另请参阅

height() lineSpacing()

leftBearing(arg__1)#
参数:

arg__1 - QChar

返回类型::

int

返回字体中字符ch的左侧偏移。

左侧偏移是字符最左侧像素从字符逻辑坐标原点的右向距离。如果字符的像素延伸到逻辑坐标原点的左侧,则此值为负。

horizontalAdvance()的图形描述。

lineSpacing()#
返回类型::

int

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

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

另请参阅

height() leading()

lineWidth()#
返回类型::

int

返回下划线和删除线宽度,已调整字体点大小。

maxWidth()#
返回类型::

int

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

minLeftBearing()#
返回类型::

int

返回字体中左侧界标的最大值。

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

注意,如果字体较大,此函数可能会非常慢。

minRightBearing()#
返回类型::

int

返回字体中右侧界标的最小值。

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

注意,如果字体较大,此函数可能会非常慢。

__ne__(other)#
参数:

otherQFontMetrics

返回类型::

bool

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

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

另请参阅

operator==()

__eq__(other)#
参数:

otherQFontMetrics

返回类型::

bool

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

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

另请参阅

operator!=()

overlinePos()#
返回类型::

int

返回基线到应该绘制上划线的地方的距离。

rightBearing(arg__1)#
参数:

arg__1 - QChar

返回类型::

int

返回字体中字符ch的右侧边沿。

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

horizontalAdvance()的图形描述。

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

  • str – 字符串

  • tabstops – int

  • tabarray – int

返回类型::

QSize

返回text在像素中的大小。

flags参数是以下标志的位或

  • Qt::TextSingleLine会忽略换行字符。

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

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

  • Qt::TextWordWrap 在矩形内断文本。

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

换行符被视为行断。

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

另请参阅

boundingRect()

strikeOutPos()#
返回类型::

int

返回基线到应该绘制删除线的地方的距离。

swap(other)#
参数:

otherQFontMetrics

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

tightBoundingRect(text)#
参数:

text – 字符串

返回类型::

QRect

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

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

如果您想了解字符串的进阶宽度(用于将字符串并排排列),请使用 horizontalAdvance() 而不是。

换行符被视为普通字符,不是行断。

tightBoundingRect(text, textOption)
参数:
返回类型::

QRect

使用 option 布局返回字符串中字符周围紧凑边界矩形。边界矩形始终至少覆盖文本如果绘制在(0, 0)时会覆盖的像素集。

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

如果您想了解字符串的进阶宽度(用于将字符串并排排列),请使用 horizontalAdvance() 而不是。

换行符被视为普通字符,不是行断。

underlinePos()#
返回类型::

int

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

xHeight()#
返回类型::

int

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