QFontMetrics дает странные результаты для моноширинного шрифта
Может кто-нибудь объяснить мне результаты этой тестовой программы?
#include <QApplication>
#include <QDebug>
#include <QFontMetrics>
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
QFont font;
font.fromString("Monospace,14");
QFontMetrics fm(font);
qDebug() << "W : " << fm.width('W');
qDebug() << "8*W : " << 8*fm.width('W');
qDebug() << "WWWWWWWW: " << fm.width("WWWWWWWW"); // 8*W
return 0;
}
После компиляции этого кода с Qt5.11 у меня есть такие результаты:
W : 11 8*W : 88 WWWWWWWW: 92
Размер одного символа 'W' для этого моноширинного шрифта равен 11. Я ожидаю, что размер строки, состоящей из 8 таких символов, должен быть 88. Но QFontmetrics::width возвращает 92!
1 ответ
Проблема была в округлении. Если я использую QFontMetricsF
вместо QFontMetrics
результаты верны
W : 11.4375
8*W : 91.5
WWWWWWWW: 91.5
Но я нашел еще одну странную вещь. QFontMetricsF::maxWidth()
должен возвращать тип qreal, но фактически он всегда возвращает округленное значение (11 в моем примере). Похоже, ошибка в Qt. https://bugreports.qt.io/projects/QTBUG/issues/QTBUG-73458?filter=allopenissues