这在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
。
答案 0 :(得分:1)
无法保证画家返回的边界框的高度与字体高度相同。此外,行间距是字体的高度和前导的总和。如果字体的前导是负数,则行间距将小于高度。
此外,为了确保您使用正确的指标,您应该使用painter.fontMetrics()而不是构建QFontMetrics(字体)。
无论如何,为了确保在您的情况下发生上述情况,您应该分别打印字体前导和字体高度(使用painter.fontMetrics())。