QFont не позволяет устанавливать межстрочный интервал или интерлиньяж вручную

Я пытался найти способ изменить значение межстрочного интервала по умолчанию в файле шрифта, используя QFont, QFontMetrics или что-то в этом роде. Я использую QPainter::drawText для рисования текста в ограничивающем прямоугольнике.

Странно, что QFont позволяет изменять кернинг шрифта и даже имеет некоторую операцию растяжения и интервал между буквами, но ничего не может изменить расстояние между строками по умолчанию. Я искал и нашел несколько частичных решений с использованием QTextLayout, но ни одно из них не работало должным образом.

Мне нужно использовать QPainter, потому что я создаю текстуру с текстом, который будет отображаться с помощью OpenGL.

Ищу больше идей для меня, чтобы попробовать!

ОБНОВЛЕНИЕ

Я обнаружил, что могу использовать QPainter для рисования QStaticText, что позволяет форматировать текст HTML, аналогично QTextDocument. Однако стиль CSS не работает, как в QTextDocument (есть отчет об ошибке). .. Поэтому до сих пор не ведет, но я надеюсь, что это направит меня на правильный путь.

РЕШЕНО

Я получил то, что хотел, используя QTextDocument, как предложил Михаил. Ссылка на решение


person Pedro Leal    schedule 28.04.2015    source источник


Ответы (2)


QFontMetrics не был специально разработан для многострочного текста.

Используйте QTextDocument. С его помощью можно печатать многострочный и форматированный текст, даже используя QPainter. Посмотрите решение, как использовать QPainter с QTextDocument

person Mykhaylo Kopytonenko    schedule 07.05.2015
comment
Он работает как задумано. Действительно классный Михаил :). Спасибо за помощь! - person Pedro Leal; 07.05.2015

Кажется, здесь мало что можно сделать.

QFontMetrics::lineSpacing возвращает то, что вам нужно, но только для чтения.

Это сумма высоты шрифта и интерлиньяжа. Вы можете настроить высоту - задайте ее в конструкторе QFont. Но вы не можете установить ведущий.

Некоторые люди добавляют \n в конец строки, чтобы увеличить расстояние между строками, но, конечно, это не всегда хорошее решение.

person demonplus    schedule 28.04.2015
comment
Спасибо за быстрый ответ @demonplus. Я проверю документацию QFont и посмотрю, решит ли то, что вы предложили, мою проблему. отпишусь о результатах :) - person Pedro Leal; 29.04.2015
comment
Я не могу найти какой-либо конструктор QFont, который принимает параметр высоты... добавление новых символов строки испортит перенос слов, так что это тоже не решение для меня. Но еще раз спасибо за ваше время @demonplus ;) - person Pedro Leal; 30.04.2015
comment
QFont::QFont(const QString & family, int pointSize = -1, int weight = -1, bool italic = false) - при изменении pointSize высота шрифта тоже изменится - person demonplus; 30.04.2015
comment
Я запутался с тем, что вы имели в виду под высотой ^^. Межстрочный интервал будет меняться с высотой, но интерлиньяж останется прежним :). Так что решения пока нет. - person Pedro Leal; 30.04.2015
comment
Да, прости. Я попытался описать это в своем ответе. Qt позволяет изменить высоту шрифта, но вы не можете изменить интерлиньяж. - person demonplus; 30.04.2015