文章目录
- 详述
- 公共函数
QFontMetrics 类
QFontMetrics类提供字体度量信息。
| Header: | #include < QFontMetrics > |
|---|---|
| qmake: | QT += gui |
详述
QFontMetrics函数计算给定字体的字符和字符串的大小。有三种方法可以创建一个QFontMetrics对象:
- 使用QFont调用QFontMetrics构造函数将为屏幕兼容的字体创建一个字体度量对象,即该字体不能是打印机字体。如果稍后更改字体,则不会更新字体度量对象。
(注意:如果使用打印机字体,返回的值可能是不准确的。打印机字体并不总是可访问的,所以如果提供了打印机字体,则使用最近的屏幕字体。) - QWidget::fontMetrics()返回小部件字体的字体度量。这相当于QFontMetrics(widget->font())。如果稍后更改小部件的字体,字体度量对象将不会更新。
- fontMetrics()返回画家当前字体的字体度量。如果稍后更改画家的字体,字体度量对象将不会更新。
一旦创建QFontMetrics对象后,该对象提供函数来访问字体、字符和呈现的字符串的各个度量。
有几种对字体进行操作的函数:ascent() ,descent() ,height() ,leading() 和lineSpacing() 返回字体的基本大小属性。 underlinePos() ,overlinePos() ,strikeOutPos() 和lineWidth() 函数返回下划线,上划线或删除字符的行的属性。 这些功能都很快。
还有一些对字体的字形集起作用的函数:minLeftBearing() ,minRightBearing() 和maxWidth() 。 这些速度一定很慢,我们建议尽可能避免使用它们。
对于每个字符,您可以获得它的horizontalAdvance()、leftBearing()和rightBearing(),并使用inFont()查明它是否在字体中。您也可以将字符视为字符串,并在其上使用字符串函数。
字符串函数包括horizontalAdvance(),用于返回像素(或点,用于打印机)的字符串宽度,boundingRect(),用于返回一个足够大的矩形,以包含已呈现的字符串,以及size(),用于返回矩形的大小。
例子:
1 2 3 4 | QFont font("times", 24); QFontMetrics fm(font); int pixelsWide = fm.horizontalAdvance("What's the width of this text?"); int pixelsHigh = fm.height(); |
另请参见QFont,QFontInfo,QFontDatabase和 Character Map Example。

公共函数
-
QFontMetrics(const QFontMetrics &fm)
-
QFontMetrics(const QFont &font, const QPaintDevice *paintdevice)
-
QFontMetrics(const QFont &font)
-
QFontMetrics & operator=(QFontMetrics &&other)
-
QFontMetrics & operator=(const QFontMetrics &fm)
-
~QFontMetrics()
-
int ascent() const
-
int descent() const
-
int height() const
-
int leading() const
-
int lineSpacing() const
-
int underlinePos() const
-
int overlinePos() const
-
int strikeOutPos() const
-
int lineWidth() const
-
int minLeftBearing() const
-
int minRightBearing() const
-
int leftBearing(QChar ch) const
-
int rightBearing(QChar ch) const
-
int maxWidth() const
-
int horizontalAdvance(const QString &text, int len = -1) const
-
int horizontalAdvance(QChar ch) const
返回字符ch以像素为单位的水平前进。这是一个适合于在ch之后绘制下一个字符的距离。

一些指标在右边的图像中描述。中间的黑色矩形覆盖了每个字符的逻辑horizontalAdvance()。外部的浅色矩形覆盖了每个字符的左轴承()和右轴承()。注意,这个特殊字体中的“f”的轴都是负的,而“o”的轴都是正的。
警告:此函数将对阿拉伯字符或字符串中间的非间距标记产生不正确的结果,因为无法考虑处理字符串时标记的字形形状和定位。当实现一个交互式文本控件时,使用QTextLayout代替。
-
QRect boundingRect(QChar ch) const
返回字符ch被墨水覆盖的矩形。
注意,包围矩形可以扩展到(0,0)的左边(例如,对于斜体字体),并且文本输出可以覆盖包围矩形中的所有像素。对于空格字符,矩形通常是空的。
注意,矩形通常在基线的上方和下方延伸。
警告:返回矩形的宽度不是字符的前进宽度。使用boundingRect(const QString &)或horizontalAdvance()来代替。 -
QRect boundingRect(const QString &text) const
返回文本指定的字符串中字符的边界矩形。
如果你想知道字符串的前进宽度(将一组字符串排列在一起),可以使用horizontalAdvance()。
边界矩形的高度至少与height()返回的值一样大。 -
QRect boundingRect(const QRect &rect, int flags, const QString &text, int tabStops = 0, int *tabArray = nullptr) const
返回由text字符串的边界矩形,这是文本在(0,0)处绘制时覆盖的像素集。图形以及边界矩形将约束到矩形矩形。
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::textShowMemonic将“&x”解释为x;即带下划线。
- Qt::TextWordWrap中断文本以适应矩形。
- Qt::Horizontal默认为Qt::AlignLeft,垂直对齐默认为Qt::AlignTop。
- 如果设置了多个水平或多个垂直对齐标志,则结果对齐未定义。
- 如果在flags中设置了Qt::TextExpandTabs,则:如果tabArray为非空,则为制表符指定以0结尾的像素位置序列;否则,如果tabStops为非零,则将其用作制表符间距(以像素为单位)。
- 请注意,边界矩形可以延伸到(0,0)的左边,例如对于斜体字体,文本输出可能覆盖边界矩形中的所有像素。
- 换行符作为换行符处理。
- 尽管实际字符高度不同,“Yes”和“yes”的边界矩形的高度是相同的。
- 此函数返回的边界矩形比简单的boundingRect() 函数计算的值稍大。此函数使用多行文本正确对齐所需的最大左右字体方向。另外,fontHeight() 和linespace() 用于计算高度,而不是单个字符的高度。
-
QRect boundingRect(int x, int y, int width, int height, int flags, const QString &text, int tabStops = 0, int *tabArray = nullptr) const
返回由x和y坐标,宽度和高度指定的矩形内给定文本的边界矩形。
如果在标志中设置了Qt :: TextExpandTabs,并且tabArray不为null,则它为制表符指定一个以0终止的像素位置序列; 否则,如果tabStops不为零,则用作制表符间距(以像素为单位)。 -
QRect tightBoundingRect(const QString &text) const
返回由文本指定的字符串中的字符周围的紧密边界矩形。
如果您想知道字符串的前进宽度(将一组字符串彼此相邻放置),请改用horizontalAdvance()。
警告:在Windows上调用此方法非常慢。 -
QSize size(int flags, const QString &text, int tabStops = 0, int *tabArray = nullptr) const
返回以像素为单位的文本大小。
flags参数是位的或以下标志的:- Qt::TextSingleLine忽略换行字符。
- Qt::TextExpandTabs展开标签(见下文)
- Qt::TextShowMnemonic解释“&x”为x;例如,强调。
- Qt::TextWordWrap打破文本适合的矩形。
- 如果tabArray是非空的,它为标签指定一个以0结尾的像素位置序列;否则,如果tabStops是非零的,它被用作制表符间距(以像素为单位)。
- 换行字符作为换行符处理。
- 虽然“Yes”和“yes”的实际字符高度不同,但它们的边界矩形的高度是相同的。
-
int averageCharWidth() const
返回字体中字形的平均宽度。 -
int xHeight() const
返回字体的“ x”高度。 通常( 但不总是) 与字符“ x”的高度相同。 -
int capHeight() const
-
qreal fontDpi() const
-
QString elidedText(const QString &text, Qt::TextElideMode mode, int width, int flags = 0) const
如果字符串文本宽于宽度,则返回该字符串的省略版本(即,其中带有“ …”的字符串)。 否则,返回原始字符串。
模式参数指定是在左侧(例如,“ … tech”),在中间(例如,“ Tr … ch”)还是在右侧(例如,“ Trol …”)删除文本。
flags参数是可选的,当前仅支持Qt :: TextShowMnemonic作为值。
省略标记遵循布局方向。 例如,如果模式为Qt :: ElideLeft,则从右到左的布局将位于文本的右侧;如果模式为Qt :: ElideRight,则将在文本的左侧。 -
bool inFont(QChar ch) const
-
bool inFontUcs4(uint ucs4) const
-
void swap(QFontMetrics &other)
-
bool operator!=(const QFontMetrics &other) const
-
bool operator==(const QFontMetrics &other) const
