这在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::height
和fontMetrics::leading
派生的。 最佳答案
不能保证画家返回的边框的高度与字体高度相同。此外,行距是字体的高度和前导之和。如果字体的前导为负,则行距将小于高度。
此外,为确保使用正确的指标,您可能应该使用painter.fontMetrics()而不是构造QFontMetrics(font)。
无论如何,要确保在您的情况下发生上述情况,您应该分别打印出字体开头和字体高度(使用painter.fontMetrics())。