class QFontMetricsF#

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

概要#

方法#

注意

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

详细信息#

警告

本节包含自动从 C++ 转换为 Python 的片段,可能包含错误。

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

创建后,该对象提供了访问字体、字符及其以字体渲染的字符串的单独度量的函数。

有以下一些操作字体的函数:ascent()descent()height()leading()lineSpacing() 返回字体的大小属性。函数 underlinePos()overlinePos()strikeOutPos()lineWidth() 返回字符下划线、上划线或删除线的大小属性。这些函数都是快速执行的。

还有一些操作字体中 MainForm 字体的函数,如:minLeftBearing()minRightBearing()maxWidth()。这些函数执行速度较慢,建议尽可能避免使用。

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

字符串函数包括 horizontalAdvance() ,用于返回字符串的像素宽度(或打印机中的点,为打印机),

示例

font = QFont("times", 24)
fm = QFontMetricsF(font)
pixelsWide = fm.horizontalAdvance("What's the advance width of self text?")
pixelsHigh = fm.height()
__init__(font, pd)#
参数 :

fontpaintdevice 构建字体度量对象。

字体度量将与传递给 paintdevice 的字体兼容。如果 paintdeviceNone,则度量将是屏幕兼容的,即您在控件或

字体度量对象在创建时存储在构造函数中传递的字体信息,并且在之后字体属性更改时不会更新。

__init__(font)
参数 :

fontQFont

font 构建字体度量对象。

字体度量将与创建 font 时使用的 paintdevice 兼容。

字体度量对象在创建时存储在构造函数中传递的字体信息,并且在之后字体属性更改时不会更新。

使用 QFontMetricsF (const QFont

__init__(arg__1)
参数 :

arg__1QFontMetricsF

构建 fm 的副本。

__init__(arg__1)
参数 :

arg__1QFontMetrics

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

ascent()#
返回类型:

float

返回字体的上升。

字体的上升是从基线到最高位置的字符延伸的距离。在实际应用中,有些字体设计师会打破这条规则,例如他们在字符上方放置多个重音符号,或者为了适应某个字符,所以这个值可能太小(尽管很少见)。

另请参阅

descent()

averageCharWidth()#
返回类型:

float

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

boundingRect(r, flags, string, tabstops=0, tabarray=None)#
参数 :
  • rQRectF

  • flags – int

  • string – str

  • tabstops – int

  • tabarray – int

返回类型:

QRectF

这是一个重载函数。

返回给定 text 中字符的边界矩形。这是文本绘制的像素集,当被限制到 rect 指定的边界矩形时。如果 rect 是一个对 None 对象的引用,例如在通过一个默认构造的 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 中定义。

如果 flags 中设置了 Qt::TextExpandTabs,则使用以下行为来解释文本中的制表符

  • 如果 tabArray 非空,则它指定了一段 0 终止的像素位置序列,用于文本中的制表符。

  • 如果 tabStops 非零,则用作制表符间距(像素为单位)。

请注意,边界矩形可能延伸到 (0, 0) 的左侧,例如对于斜体字体。

换行符按行断处理。

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

此函数返回的边界矩形比简单的 boundingRect() 函数计算得到的略大。此函数使用 maximum leftright 字体偏移量,以确保多行文本正确对齐。此外,fontHeight() 和 lineSpacing() 用于计算高度,而不是单个字符的高度。

另请参阅

horizontalAdvance() boundingRect() Alignment

boundingRect(string)
参数 :

string – str

返回类型:

QRectF

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

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

如果您想了解字符串的进展宽度(用于排列一系列字符串),请改用 horizontalAdvance()

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

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

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

QRectF

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

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

如果您想了解字符串的进展宽度(用于排列一系列字符串),请改用 horizontalAdvance()

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

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

boundingRectChar(arg__1)#
参数 :

arg__1QChar

返回类型:

QRectF

capHeight()#
返回类型:

float

返回字体的基准高度。

字体的基准高度是基准线上方大写字母的高度。它具体指平直的大写字母的高度,如 H 或 I,与圆形字母如 O 或尖形字母如 A 相比,后两者可能会显示溢出。

另请参阅

ascent()

descent()#
返回类型:

float

返回字体的下降高度。

下降高度是指从基线到底部延伸的字符的距离。请注意,这与 X 不同,后者加1像素。在实践中,一些字体设计师会打破这条规则,例如为了适应某些字符,因此这个值可能太小,尽管这种情况很少见。

另请参阅

ascent()

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

  • modeTextElideMode

  • width – float

  • flags – int

返回类型:

str

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

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

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

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

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

fontDpi()#
返回类型:

float

返回字体DPI。

height()#
返回类型:

float

返回字体的高度。

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

另请参阅

leading() lineSpacing()

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

float

返回使用 option 布局后 text 的水平推进像素值。

推进距离是绘制后续字符后的距离。

另请参阅

boundingRect()

horizontalAdvance(string[, length=-1])
参数 :
  • string – str

  • length – int

返回类型:

float

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

推进距离是绘制后续字符后的距离。

另请参阅

boundingRect()

horizontalAdvanceChar(arg__1)#
参数 :

arg__1QChar

返回类型:

float

inFont(arg__1)#
参数 :

arg__1QChar

返回类型:

bool

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

inFontUcs4(ucs4)#
参数 :

ucs4 – int

返回类型:

bool

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

leading()#
返回类型:

float

返回字体的大间距。

这是自然行间距。

另请参阅

height() lineSpacing()

leftBearing(arg__1)#
参数 :

arg__1QChar

返回类型:

float

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

左边界是字符最左侧像素点相对于字符逻辑起点的向右距离。如果字符的像素延伸到逻辑起点左侧,则此值是负数。

有关此度量指标的可视描述,请参阅 horizontalAdvance()

lineSpacing()#
返回类型:

float

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

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

另请参阅

height() leading()

lineWidth()#
返回类型:

float

返回下划线和删除线的宽度,适合字体的磅值。

maxWidth()#
返回类型:

float

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

minLeftBearing()#
返回类型:

float

返回字体的最小左边界。

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

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

minRightBearing()#
返回类型:

float

返回字体最小右侧基线值。

这是字体中所有字符最小右侧基线(char)。

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

__ne__(other)#
参数 :

otherQFontMetricsF

返回类型:

bool

这是一个重载函数。

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

另请参阅

operator==()

__eq__(other)#
参数 :

otherQFontMetricsF

返回类型:

bool

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

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

overlinePos()#
返回类型:

float

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

rightBearing(arg__1)#
参数 :

arg__1QChar

返回类型:

float

返回字体中字符ch的右侧基线值。

右侧偏移定义为字符最右像素与后续字符逻辑起点的左侧距离。如果字符像素超出字符的 horizontalAdvance(),此值将为负。

有关此度量指标的可视描述,请参阅 horizontalAdvance()

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

  • str – 字符串

  • tabstops – int

  • tabarray – int

返回类型:

QSizeF

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

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

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

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

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

  • Qt::TextWordWrap 将文本分成适合矩形的行。

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

如果 flags 中设置了 Qt::TextExpandTabs,则使用以下行为来解释文本中的制表符

  • 如果 tabArray 非空,则它指定了一段 0 终止的像素位置序列,用于文本中的制表符。

  • 如果 tabStops 非零,则用作制表符间距(像素为单位)。

换行符按行断处理。

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

另请参阅

boundingRect()

strikeOutPos()#
返回类型:

float

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

swap(other)#
参数 :

otherQFontMetricsF

other 交换此字体度量实例。此函数非常快速,永不失败。

tightBoundingRect(text)#
参数 :

text – str

返回类型:

QRectF

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

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

如果您想了解字符串的进展宽度(用于排列一系列字符串),请改用 horizontalAdvance()

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

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

QRectF

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

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

如果您想了解字符串的进展宽度(用于排列一系列字符串),请改用 horizontalAdvance()

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

underlinePos()#
返回类型:

float

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

xHeight()#
返回类型:

float

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