Название: Проблема: слишком медленное удаление объектов с канвы Отправлено: Антонио от Декабрь 24, 2004, 17:00 Размещаю на канве (QCanvas) объекты - наследники классов QCanvasPolygon, QCanvasRectangle, QCanvasText
Количество колеблется от 20..2000. Вывожу их в окно при помощи QCanvasView. Удаляю их с канвы следующим кодом: Код:
Удаляется все достаточно медленно. Не катастрофично, но медленно. (когда кол-во объектов большое (1500), то около 10 сек) При этом создает и отрисовывает эту канву с объектами он гораздо быстрее... Вообще надо этим заниматься или при закрытии окна Qt сама всю память освободит? Название: Проблема: слишком медленное удаление объектов с канвы Отправлено: Admin от Декабрь 26, 2004, 16:57 Тормоза:
1. STL вообще сама по себе тормозная конструкция. Qt реализация не исключение. 2. А не льзя ли не создавать кучу QCanvasPolygon. Сделать один, отрисовать, и переопределить? PS: Если не будешь удалять, то по логике все равно программа будет на выходе тормозить, для них деструктор вызывается Название: Re: Проблема: слишком медленное удаление объектов с канвы Отправлено: pilot.net от Декабрь 27, 2004, 13:17 Цитата: "Антонио" Размещаю на канве (QCanvas) объекты - наследники классов QCanvasPolygon, QCanvasRectangle, QCanvasText Количество колеблется от 20..2000. Вывожу их в окно при помощи QCanvasView. Удаляю их с канвы следующим кодом: Код:
Я использую тотже код: QCanvasItemList list = header->allItems(); for ( QCanvasItemList::Iterator it = list.begin();; it != list.end(); ++it) { if ( *it ) { (*it)->setVisible(false); delete *it; } } header->setAllChanged (); header->update (); у меня все быстро удаляется а итемов и больше бывает, максимальная задержка 1-2 секунды Название: Проблема: слишком медленное удаление объектов с канвы Отправлено: pilot.net от Декабрь 27, 2004, 13:21 Цитата: "Admin" Тормоза: 1. STL вообще сама по себе тормозная конструкция. Qt реализация не исключение. 2. А не льзя ли не создавать кучу QCanvasPolygon. Сделать один, отрисовать, и переопределить? PS: Если не будешь удалять, то по логике все равно программа будет на выходе тормозить, для них деструктор вызывается 1 - это не правда, генерится оптимальный код - если не верите посмотрите исходники 2- это опционально ps - если деструктор явно не вызовется то никто его не вызовет, а при выходе просто эта память освободится операционной системой |