Быстрый рендер текста средствами Qt возможен?
От: A.J. Россия CintaNotes
Дата: 24.06.21 07:29
Оценка:
Приветствую!
Уже постил это на stackoverflow, но похоже что там мало специалистов по Qt, может тут кто подскажет)

Суть задачи: мне нужно быстро рисовать текст средствами Qt Widgets.

По сути, нужна функция, аналогичная функции WinAPI TabbedTextOut (то есть, не нужно переносить слова или считать высоту).

QPainter.drawText поразил медлительностью. Он в целом не очень быстр, но рендер некоторых символов Unicode
(смайликов) занимает вплоть до 500мс (на Ryzen 3900x)! Похоже, что там под капотом делается много чего ненужного.

Не хочется прибегать к платформенно-зависимым решениям, по крайней мере до того, как смогу убедиться,
что ускорить вывода текста только средствами Qt невозможно.

Что я пробовал:
— Готовить отрендеренный текст заранее в рабочем потоке (в пуле потоков), в виде QImage.
Работает неплохо, но быстрая прокрутка тем не менее быстро исчерпывает кэш и приводит к затыкам.
Кроме того, кэш из QImage занимает много памяти.

— QML ListView. На самом деле это не намного быстрее, и со своими сложностями, так что я бы
предпочел решение только для виджетов.

— QStaticText. По-прежнему не решает проблему исчерпания кеша.
— QTextLayout. То же самое, кэш быстро заканчивается.

P.S. Qt 5.15 на Windows 10.

Спасибо!
Отредактировано 24.06.2021 8:06 A.J. . Предыдущая версия . Еще …
Отредактировано 24.06.2021 7:30 A.J. . Предыдущая версия .
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.