Russian Qt Forum

Qt => 2D и 3D графика => Тема начата: Антонио от Декабрь 24, 2004, 17:00



Название: Проблема: слишком медленное удаление объектов с канвы
Отправлено: Антонио от Декабрь 24, 2004, 17:00
Размещаю на канве (QCanvas) объекты - наследники классов QCanvasPolygon, QCanvasRectangle, QCanvasText
Количество колеблется от 20..2000.
Вывожу их в окно при помощи QCanvasView.
Удаляю их с канвы следующим кодом:
Код:

QCanvasItemList l = m_pCanvas->allItems();
for(QCanvasItemList::Iterator i = l.begin(); i != l.end(); i++)
{
    QCanvasItem* item = *i;
    delete *i;
}


Удаляется все достаточно медленно. Не катастрофично, но медленно. (когда кол-во объектов большое (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 l = m_pCanvas->allItems();
for(QCanvasItemList::Iterator i = l.begin(); i != l.end(); i++)
{
    QCanvasItem* item = *i;
    delete *i;
}


Я использую тотже код:
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 - если деструктор явно не вызовется то никто его не вызовет, а при выходе просто эта память освободится операционной системой