На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! Правила раздела *nix / gcc / Eclipse / Qt / wxWidgets / GTK+
  • При создании темы ОБЯЗАТЕЛЬНО указывайте версию тулкита / библиотеки / компилятора.
  • Перед тем как задать вопрос, сформулируйте его правильно, чтобы вас могли понять.
  • Нарушение Правил может повлечь наказание со стороны модераторов.


Полезные ссылки:
user posted image Boost по-русски
user posted image Qt по-русски
Модераторы: archimed7592
  
> QListWidgetItem утекает память
    Имею такой код. По диспетчеру смотрю что память утекает при каждом вызове функции. Вроде делаю всё правильно а память утекает. Если убрать заполнение листа то утечка прекращается. Что я делаю не так?

    ExpandedWrap disabled
      void MainWindow::show_report(QList<int> &iType, QStringList &strErr)
      {
          // очищаю старые данные если такие есть
          if(ui->lstReport->count()>0)
          {
              qDebug() << "BEFORE ADD";
              qDebug() << ui->lstReport->count();
       
              for(int i=ui->lstReport->count()-1; i>0; i--)
              {
                  QListWidgetItem *lstItem = ui->lstReport->takeItem(i);
                  if(lstItem)
                  {
                      qDebug() << i;
                      ui->lstReport->removeItemWidget(lstItem);
                      delete lstItem;
                  }
                  else
                  {
                      qDebug() << "IM NOT ITEM!";
                  }
              }
       
              ui->lstReport->clear();
          }
       
       
       
          // добавляю новые данные
          for(int i=0; i<iType.count(); i++)
          {
              QListWidgetItem *lstItem = new QListWidgetItem(iType[i]==1?QIcon(":/images/warning.png"):QIcon(), strErr[i], ui->lstReport);
              ui->lstReport->addItem(lstItem);
          }
       
          iType.clear();
          strErr.clear();
       
          qDebug() << "AFTER ADD";
          qDebug() << ui->lstReport->count();
      }
    Сообщение отредактировано: Парамон -
      Цитата Парамон @
              for(int i=ui->lstReport->count()-1; i>0; i--)
              {
                  QListWidgetItem *lstItem = ui->lstReport->takeItem(i);


      В этом цикле никогда не будет вызван ui->lstReport->takeItem(0); Это так и должно быть?
      Возможно в этом и проблема, что в списке всегда остаётся первый элемент, который, насколько я понял, не будет корректно удалён в ui->lstReport->clear().
      0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
      0 пользователей:


      Рейтинг@Mail.ru
      [ Script execution time: 0,0182 ]   [ 16 queries used ]   [ Generated: 28.03.24, 16:32 GMT ]