为什么 QFontMetrics::lineSpacing() 小于字符边界框的高度?

Why is QFontMetrics::lineSpacing() smaller than the height of the characters' bounding boxes?

本文关键字:高度 字符边界 QFontMetrics lineSpacing 为什么 小于      更新时间:2023-10-16

这发生在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::heightfontMetrics::leading

> 无法保证绘制者返回的边界框的高度与字体高度相同。此外,行距是字体的高度和行距的总和。如果字体的行距为负数,则行距将小于高度。

此外,为了确保您使用正确的指标,您可能应该使用 painter.fontMetrics() 而不是构建 QFontMetrics(font)。

无论如何,为了确保在您的情况下发生上述哪一种情况,您应该分别打印出字体前导和字体高度(使用 painter.fontMetrics())。