Russian Qt Forum

Qt => 2D и 3D графика => Тема начата: Ubuntu_linux от Октябрь 30, 2011, 16:47



Название: QPainter drawText и потребление памяти.
Отправлено: Ubuntu_linux от Октябрь 30, 2011, 16:47
На QImage пишу текст пейнтером, где-то на страничку А4 текста память утекает на 1 МБ, что делать?


Название: Re: QPainter drawText засервет память?
Отправлено: andrew.k от Октябрь 30, 2011, 19:01
что-то у тебя все с памятью проблемы)


Название: Re: QPainter drawText засервет память?
Отправлено: Ubuntu_linux от Октябрь 30, 2011, 22:51
что-то у тебя все с памятью проблемы)
На мобильных платформах каждый мегабайт на счету!

Меняю размер шрифта QFont  в пейнтера и меняется результат в памяти, причем чем больше шрифт, тем меньше памяти. ???
Что делать непойму, может во всем виноват QImage?


Название: Re: QPainter drawText засерает память?
Отправлено: andrew.k от Октябрь 30, 2011, 23:24
Может это нормально?
Интуитивно кажется, что да. Может шрифтовые литералы перед отрисовкой в битмапы преобразуются?


Название: Re: QPainter drawText засерает память?
Отправлено: Ubuntu_linux от Октябрь 31, 2011, 00:10
так а куда память уходит?


Название: Re: QPainter drawText засерает память?
Отправлено: andrew.k от Октябрь 31, 2011, 00:21
ну вообще да.
Остается смотреть исходники и выяснять.


Название: Re: QPainter drawText засерает память?
Отправлено: Ubuntu_linux от Октябрь 31, 2011, 01:33
Вот такой баг нашел по этому поводу: https://bugreports.qt.nokia.com/browse/QTBUG-21222


Название: Re: QPainter drawText засерает память?
Отправлено: andrew.k от Октябрь 31, 2011, 02:05
Ну вот следовало ожидать.
А у тебя какая версия? Там кто-то пишет, что в 4.7.3 бага нет.


Название: Re: QPainter drawText засерает память?
Отправлено: Ubuntu_linux от Октябрь 31, 2011, 02:11
Ну вот следовало ожидать.
А у тебя какая версия? Там кто-то пишет, что в 4.7.3 бага нет.
4.7.4 :(
Качаю 4.7.3 , посмотрю как будет на старой версии работать.


Название: Re: QPainter drawText засерает память?
Отправлено: Ubuntu_linux от Октябрь 31, 2011, 02:57
Все по старому :( даже хуже.


Название: Re: QPainter drawText засерает память?
Отправлено: andrew.k от Октябрь 31, 2011, 03:12
Может попробовать другой из нескольких вариантов drawText?
Хотя скорее всего все подобным образом должны работать.


Название: Re: QPainter drawText засерает память?
Отправлено: Ubuntu_linux от Октябрь 31, 2011, 13:30
А какая есть альтернатива? может каким-то другим образом...


Название: Re: QPainter drawText засерает память?
Отправлено: andrew.k от Октябрь 31, 2011, 13:40
Я имел ввиду использовать один из вариантов drawText. Там их штук 8.
Но шанс на успех 0,4%.

Если бы у меня было время заниматься. И если это достаточно важно для проекта, то я бы взял исходник QPainter.
И стал бы искать ошибку. И потом бы использовал свой исправленный QPainter.
Странно на самом деле. Довольно явная бага же. Почему ее до сих пор не поправили?
А может это и не бага совсем, может просто это позже произойдет?

Еще такой эксперимент, выполнить эту функцию использующую drawText 10 раз к примеру. Или еще больше.
Если есть утечка, то 1 метр превратится в соответствующее количество.
А если так и останется 1 метр, то может так и надо? Может там кешируется что-нибудь?


Название: Re: QPainter drawText засерает память?
Отправлено: _OLEGator_ от Октябрь 31, 2011, 13:57
Попробуй так:
Код
C++ (Qt)
QPainterPath::addText();
QPainter::fillPath();
QPainter::drawPath();

Не по теме: таким способом текст рисуется быстрее


Название: Re: QPainter drawText засерает память?
Отправлено: Ubuntu_linux от Октябрь 31, 2011, 14:48
Попробуй так:
Код
C++ (Qt)
QPainterPath::addText();
QPainter::fillPath();
QPainter::drawPath();

Не по теме: таким способом текст рисуется быстрее
Попробовал,  таким методом рисует в 2-3 раза меднение. А результат в  памяти такой же...


Название: Re: QPainter drawText засерает память?
Отправлено: Bepec от Октябрь 31, 2011, 15:24
Можно пожалуйста кусок кода, желательно вообще урезанный клас вашего потока для теста и проверки?


Название: Re: QPainter drawText засерает память?
Отправлено: _OLEGator_ от Октябрь 31, 2011, 16:55
Попробуй так:
Код
C++ (Qt)
QPainterPath::addText();
QPainter::fillPath();
QPainter::drawPath();

Не по теме: таким способом текст рисуется быстрее
Попробовал,  таким методом рисует в 2-3 раза меднение. А результат в  памяти такой же...

Опять же не по теме: Быстрее рисует с заранее подготовленным QPainterPath, который не надо каждый раз создавать при отрисовке, именно на создание все время и тратиться.


Название: Re: QPainter drawText засерает память?
Отправлено: Ubuntu_linux от Октябрь 31, 2011, 17:51
Сейчас привожу код в божеский вид, а то я накуролесил, надо розложить все по полочкам.


Название: Re: QPainter drawText засерает память?
Отправлено: Ubuntu_linux от Октябрь 31, 2011, 18:37
Переделал весь код, изменил структуру и в результате все получилось :) Вот это жырок.
Что-то  по кругу ходило....