QFontMetrics 给出等宽字体的奇怪结果

pol*_*181 5 qt qfontmetrics qfont

\xd0\xa1an 有人向我解释一下这个测试程序的结果吗?

\n\n
#include <QApplication>\n#include <QDebug>\n#include <QFontMetrics>\nint main(int argc, char *argv[])\n{\n    QApplication app(argc, argv);\n    QFont font;\n    font.fromString("Monospace,14");\n    QFontMetrics fm(font);\n    qDebug() << "W       : " << fm.width(\'W\');\n    qDebug() << "8*W     : " << 8*fm.width(\'W\');\n    qDebug() << "WWWWWWWW: " << fm.width("WWWWWWWW"); // 8*W\n    return 0;\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

用 Qt5.11 编译这段代码后,我得到这样的结果:

\n\n
\n
W       :  11\n8*W     :  88\nWWWWWWWW:  92\n
Run Code Online (Sandbox Code Playgroud)\n
\n\n

这种等宽字体的一个字符“W”的大小是 11。我预计由 8 个这样的字符组成的字符串的大小应该是 88。但是 QFontmetrics::width 返回 92!

\n

pol*_*181 3

问题在于四舍五入。如果我使用QFontMetricsF而不是QFontMetrics结果是正确的

W       :  11.4375
8*W     :  91.5
WWWWWWWW:  91.5
Run Code Online (Sandbox Code Playgroud)

但我又发现了一件奇怪的事情。QFontMetricsF::maxWidth()应该返回 qreal 类型,但实际上它总是返回舍入值(在我的示例中为 11)。看起来像是 Qt 中的错误。 https://bugreports.qt.io/projects/QTBUG/issues/QTBUG-73458?filter=allopenissues