我正在创建一个自定义标签,并希望它有一个13像素的高文本,并将标签的最大高度设置为14。
textFont.setFamily("Frutiger LT Com 55 Roman");
textFont.setPixelSize(13);
setFont(textFont);
QFontMetrics fm(this->font());
QFontInfo fi(this->font());
qDebug()<<"QFontMetrics"<<fm.height()<<fm.xHeight()<<fm.ascent()<<fm.descent();
qDebug()<<"QFontInfo"<<fi.exactMatch()<<fi.family()<<fi.pixelSize();
这就是我得到的
QFontMetrics 16 3 13 3
QFontInfo true "Frutiger LT Com 55 Roman" 13
当我将pixelSize设置为“13”时,为什么我将高度设为“16”? 因为我的标签上的文字被从底部剪裁(垂直居中对齐)。
QFontMetrics“height()”定义表示height = ascent + descent + 1(基线)。但是你可以看到上面的ascent = 13,descent = 3和height = 16。这与“height()”函数定义相矛盾。
答案 0 :(得分:3)
这似乎是Qt 5文档中的错误(有人忘记更改一些Doxygen评论)。
删除+1
的提交在这里:
https://qt.gitorious.org/qt/qtbase/commit/cb8445f0323b0eefbb04f1d8adad81a00b53abd8
提交说:
从字体高度计算中删除历史+1
历史上,我们将字体高度计算为上升+下降+ 1。在Qt 4,添加一个补丁来解决这个问题,从中减去1 字体引擎的下降。我们现在删除+1和工作 变通。