QFontMetrics提供关于字体的指标信息。
QFontMetrics的函数用于计算给定字体的字符和字符串的大小。有三种方法可以创建QFontMetrics对象:
先上一张图:
图片来自:Qt 字体(01):文本尺寸的常见参数解释_读书笔记-CSDN博客
height = ascent + descent
leading:行距
baseline:基线,文本绘制是起始位置lineSpacing:两基线间的距离
lineSpacing = height + leading
boundingRect 的高度和height一致,但宽度有点偏窄
leading = descent ,这一点在Qt文档里没有明确,可能是特例吧
————————————————
版权声明:本文为CSDN博主「hitzsf」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/hitzsf/article/details/108720460
1、QRect boundingRect(QChar ch)
如果要在坐标系原点绘制字符ch,则返回墨迹覆盖的矩形。注意,边界矩形可以延伸到(0,0)的左侧(例如斜体字体),并且文本输出可以覆盖边界矩形中的所有像素。对于空格字符,矩形通常为空。矩形通常延伸到基线的上方和下方。
坐标系原点: 以基线为x轴
QFontMetrics fontMetrics = this->fontMetrics();
qDebug()<
2、QRect boundingRect(const QString &text)
返回字符串所占的QRect。
3、int capHeight()
返回大写字母的高度。
4、QString elidedText(const QString &text, Qt::TextElideMode mode, int width, int flags = 0)
如果字符串文本宽度大于宽度,则返回该字符串的省略版本(即,其中包含“…”的字符串)。否则,返回原始字符串。宽度以像素而不是字符为单位指定。
参数2是省略号位置:
QFont f;
f.setPixelSize(30);
f.setStretch(QFont::UltraExpanded);
QFontMetrics FontMetric1 = QFontMetrics(f);
qDebug()<
5、qreal fontDpi()
获取字体DPI。
6、int horizontalAdvance(const QString &text, int len = -1)
返回文本的第一个长度字符的水平进位(以像素为单位)。如果len为负(默认值),则使用整个字符串。这是适合在文本之后绘制后续字符的距离。
QFont f;
f.setPixelSize(30);
f.setStretch(QFont::UltraExpanded);
QFontMetrics FontMetric1 = QFontMetrics(f);
qDebug()<
此例子中"hello world"这个字符串的宽度是328,此字符串后续字符距离是330,也就是下一个字符是从330开始绘制,字符'W'的宽度是30,如果"hello world"后面再绘制一个'W'则整个字符串的宽度应该是360,打印验证正是360。
7、int horizontalAdvance(QChar ch)
同上,参数不同。
8、bool inFont(QChar ch)
字符ch是否字体中的有效字符。
9、int lineWidth()
返回下划线和删除线的线宽。
10、int maxWidth()
返回字体中最宽字符的宽度。
11、QSize size(int flags, const QString &text, int tabStops = 0, int *tabArray = nullptr)
获取文本的size。
参数1有以下选项:
qDebug()<
12、int overlinePos()
返回从基线到应绘制上划线的位置的距离。(字体不一定设置了上划线)
13、int strikeOutPos()
返回从基线到删除线应绘制位置的距离。(字体不一定设置了删除线)
14、QRect tightBoundingRect(const QString &text)
返回文本指定的字符串中字符周围的紧边框。(Windows系统此方法非常慢)
QFont f;
f.setPixelSize(30);
f.setStretch(QFont::UltraExpanded);
QFontMetrics FontMetric1 = QFontMetrics(f);
qDebug()<
得到的QRect比boundingRect()的小。
15、int underlinePos()
返回从基线到应绘制下划线的位置的距离。(字体不一定设置了下划线)
三、QFontMetrics和QFontMetricsF
这两个类中的API是一致的,只不过QFontMetricsF中的方法是qreal类型的,QFontMetrics中的方法是int类型的。