这在Linux上发生。

执行此代码时出现问题(我在小部件的paint事件中绘制):

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())。

10-08 14:31