为什么 QFontMetrics::lineSpacing() 小于字符边界框的高度?
Why is QFontMetrics::lineSpacing() smaller than the height of the characters' bounding boxes?
这发生在Linux上。
执行此代码时会出现此问题(我在小部件的绘制事件中绘图):
painter.drawText(0, 0, 1000, 1000, 0, QString("0"), &charBoundingBox);
qDebug() << "bounding box height" << charBoundingBox.height();
qDebug() << "lineSpacing" << painter.fontMetrics().lineSpacing();
qDebug() << "leading" << painter.fontMetrics().leading();
qDebug() << "height" << painter.fontMetrics().height();
qDebug() << painter.font();
它输出:
bounding box height 11
lineSpacing 7
leading -1
height 8
QFont( "Digital-7,10,-1,5,50,0,0,0,0,0" )
请注意,字符的边界框的高度为 11
,而行距为 7
。这部分是因为前导是负数,但即使没有它,字体高度仍然较小。
Qt如何计算它返回的字符边界框?它的高度显然不是来自fontMetrics::height
和fontMetrics::leading
。
> 无法保证绘制者返回的边界框的高度与字体高度相同。此外,行距是字体的高度和行距的总和。如果字体的行距为负数,则行距将小于高度。
此外,为了确保您使用正确的指标,您可能应该使用 painter.fontMetrics() 而不是构建 QFontMetrics(font)。
无论如何,为了确保在您的情况下发生上述哪一种情况,您应该分别打印出字体前导和字体高度(使用 painter.fontMetrics())。
相关文章:
- C++字符*缓冲区的大小
- HEX值到wchar_t字符(UTF-8)的转换
- 为什么 Serial.println(<char[]>);返回随机字符?
- 我的字符计数代码计算错误.为什么
- 字符串-C++后显示的随机字符
- 将Integer转换为4字节的unsined字符矢量(按大端字节顺序)
- 如何在C++中从字符串中分割字符
- 为什么msgrcv()将垃圾字符馈送到缓冲区
- 指向指向字符数组的指针数组的指针
- 如何用转义符替换字符串中的所有特殊字符
- 为什么 sscanf 无法从一个字符串中读取uint64_t和字符?
- 比较字符数组
- 将字符指针十六进制转换为字符串并保存在文本文件C++中
- 从矢量<无符号字符>转换为字符* 包括垃圾数据
- 如何使用Crypto++并为RSA返回可打印的字节/字符数组
- 如何在C++中确定文本文件中的元素是字符还是数字
- 如何将一个ostringstream十六进制字符串字符对转换为单个unit8t等价的二进制值
- 为什么 QFontMetrics::lineSpacing() 小于字符边界框的高度?
- 在ABBYY SDK中获取字符边界框和置信度
- 字符类型的边界处的增量运算符的行为