QFontMetrics дает странные результаты для моноширинного шрифта - PullRequest
0 голосов
/ 25 января 2019

Может кто-нибудь объяснить мне результаты этой тестовой программы?

#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 Ответ

0 голосов
/ 01 февраля 2019

Проблема была в округлении.Если я использую 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

...