LINUX.ORG.RU

Вопрос об Qt


0

1

Вопрос о том, как в Qt рисуется текст Там используется что-то freetype или все свое?

И еще из исходников QLineEdit я понял, что текст перерисовывается каждый раз при вызове paintEvent. соответственно чем больше текста, тем дольше рисуется. С остальными виджетами так же, или там как-то оптимизировано?


От платформы зависит, но в линуксе да, freetype.

Во-первых, paintEvent на каждый чих не прилетает. Во-вторых, вызов paintEvent не говорит о том, что виджет будет перерисован целиком - там передается регион, который требует перерисовки.

Amp ★★★
()
Последнее исправление: Amp (всего исправлений: 1)
Ответ на: комментарий от Amp

в линуксе да, freetype.

Для embedded можно без freetype собирать, но тогда только растеризованные шрифты работают.

annulen ★★★★★
()
Ответ на: комментарий от Amp

судя по моим наблюдениям каждый раз когда «мигает» курсор вызывается paintEvent. по крайней мере для QLineEdit

кстати, а вот если в QTextEdit в начало вставляется новый символ - можно ожидать, что весь текст переместится, в этом случае как я понимаю перерисовывается текст полностью?

lrod
() автор топика
Ответ на: комментарий от lrod

Ну логично, курсор то надо перерисовать. Но ты смотрел что за регион перерисовывается? Должен перерисовываться только квадратик с курсором.

anonymous
()
Ответ на: комментарий от lrod

paintEvent конечно будет вызван, другой вопрос что происходит там в потрохах, в разухабистом классе QTextLayout. В тех же item-based виджетах относительно просто делать перерисовку по региону, проверяя какие видимые item-ы попадают в него и перерисовывая только их. В QLineEdit скорее всего большого смысла это не имеет.

Кстати если смотреть различные приложения, то можно заметить, что наиболее «тяжелые» виджеты для отрисовки - это различные листвью/таблицы. Там чаще всего встречается навороченный рендеринг с делегатами у айтемов и прочими плюшками.

Amp ★★★
()

еще такой вопрос:

вот например есть QLineEdit и QLineEditPrivate, и многие функции QLineEdit являются обертками над функциями QLineEditPrivate?

lrod
() автор топика
Ответ на: комментарий от lrod

D-Pointers и внутренние классы типа QLineEditPrivate сделаны для сокрытия деталей реализации класса и членов класса из public доступа, для обеспечения бинарной совместимости снизу вверх, см. PIMPL.

alex_custov ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.