Это происходит в 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::height
а также fontMetrics::leading
,
Нет гарантии, что высота ограничительной рамки, возвращаемой художником, будет равна высоте шрифта. Кроме того, межстрочный интервал представляет собой сумму высоты и начертания шрифта. Если начальная буква для шрифта отрицательна, межстрочный интервал будет меньше высоты.
Кроме того, чтобы убедиться, что вы используете правильные метрики, вам, вероятно, следует использовать painter.fontMetrics () вместо создания QFontMetrics (шрифта).
В любом случае, чтобы убедиться, что из вышеперечисленного происходит в вашей ситуации, вы должны распечатать начертание шрифта и высоту шрифта отдельно (используя painter.fontMetrics ()).
Других решений пока нет …