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

标签 c++ qt fonts ubuntu

这发生在 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())。

关于c++ - 为什么 QFontMetrics::lineSpacing() 小于字符边界框的高度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13432746/

相关文章:

css - 字体 - 生成的字体在 ie 中不起作用?

c++ - 使用 OpenCV 的目标检测项目

c++ - 部署qt mysql应用程序

qt - 使用 drawBackground 在 QGraphicsView 上绘制背景

iphone - 使用 iPhone 上没有的字体

css - ionic 3 为每个设备导入字体

c++ - 同时打开 TCP

c++ - 常量正确性

c++ - 使用 WMI 的电池 FullChargeCapacity 返回 0

c++ - 在 C++/Qt 中获取平台特定的行尾字符