Обрезание Qt drawText из-за дополнительного верхнего интервала. Почему для некоторых символов предусмотрен дополнительныC++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Гость
 Обрезание Qt drawText из-за дополнительного верхнего интервала. Почему для некоторых символов предусмотрен дополнительны

Сообщение Гость »


Я пытаюсь использовать 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); }
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C++»