Приветствую!
Уже
постил это на 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.
Спасибо!