Я пытаюсь использовать QPainter::drawText() для отрисовки некоторых китайских символов. Но в некоторых шрифтах при рисовании текста имеется дополнительный верхний интервал. Почему это происходит только с некоторыми персонажами?
Протестировано на Qt версий 6.6.3 и 5.15.2
Погуглил некоторую информацию, но ничего не ответило на вопрос:
Значение слов «верх», «восхождение», «базовая линия», «спуск», «низ» и «интерлиньяж» в FontMetrics Android
https://forum.qt.io/topic/117903/imposs ... metricsf/8
https://bugreports.qt.io/browse/QTBUG-53271
Как вы можете видеть ниже: зеленое поле соответствует метрической высоте, а красное — ограничивающей высоте. Конечно, ограничивающая высота ограничивает весь текст, но есть дополнительные интервалы сверху и снизу...

#include "mainwindow.h" #include "ui_mainwindow.h" #include #include #include MainWindow::MainWindow(QWidget *parent) : QMainWindow(родительский) , ui(новый пользовательский интерфейс::MainWindow) { ui->setupUi(это); } MainWindow::~MainWindow() { удалить интерфейс; } void MainWindow::paintEvent (событие QPaintEvent*) { // Сначала вызываем реализацию базового класса QMainWindow::paintEvent(событие); // Получаем объект QPainter QPainter краска(это); Шрифт QFont; font.fromString("Apple LiGothic"); шрифт.setPointSize(50); Метрика QFontMetrics (шрифт); Paint.setRenderHints(QPainter::TextAntialiasing | QPainter::Antialiasing, true); краска.setFont(шрифт); Paint.setPen(Qt::white); const int align = Qt::AlignLeft | Qt::AlignTop | Qt::TextWordWrap; QString text = "钳禾日当午"; QRectbound = metric.boundingRect(текст); bound = QRect(0, 0,bound.width(),bound.height()); QRect metricBound(0, 0,bound.width(), metric.height()); краска.перевести(10, 100); Paint.setPen(Qt::red); краска.drawRect(связанный); Paint.setPen(Qt::green); Paint.drawRect(metricBound/*.adjusted(0,10,0,10)*/); // настройка взлома Paint.setPen(Qt::white); Paint.drawText(0, 0,bound.width(),bound.height(),align,text); text = "汗滴禾下土"; связанный = metric.boundingRect(текст); bound = QRect(0, 0,bound.width(),bound.height()); metricBound = QRect(0, 0,bound.width(), metric.height()); краска.перевести(0, 100); Paint.setPen(Qt::red); краска.drawRect(связанный); Paint.setPen(Qt::green); Paint.drawRect(metricBound); Paint.setPen(Qt::white); Paint.drawText(0, 0,bound.width(),bound.height(),align,text); }