Russian Qt Forum
Октябрь 17, 2017, 14:30 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: QListWidgetItem утекает память  (Прочитано 273 раз)
NeCoder
Новичок

Offline Offline

Сообщений: 5


Просмотр профиля
« : Сентябрь 22, 2017, 12:57 »

Имею такой код. По диспетчеру смотрю что память утекает при каждом вызове функции. Вроде делаю всё правильно а память утекает. Если убрать заполнение листа то утечка прекращается. Что я делаю не так?

Код:
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();
}
« Последнее редактирование: Сентябрь 22, 2017, 13:21 от NeCoder » Записан
MrDron
Новичок

Offline Offline

Сообщений: 15


Просмотр профиля
« Ответ #1 : Сентябрь 22, 2017, 13:34 »

Судя по документации то QListWidget::clear() должен сам все удалять и без delete takeItem(i)
Цитировать
All items will be permanently deleted.
И в переборе кстати условие i >= 0
Записан
NeCoder
Новичок

Offline Offline

Сообщений: 5


Просмотр профиля
« Ответ #2 : Сентябрь 22, 2017, 13:59 »

Цитировать
И в переборе кстати условие i >= 0
Таки да.

Судя по документации то QListWidget::clear() должен сам все удалять и без delete takeItem(i)
Изучу.

Как выяснил - память течет из-за иконки. Если иконку загрузить в конструкторе MainWindow и потом использовать уже загруженную иконку, то утечка прекращается. Может так и задумано, я без понятия. Непонимающий
Записан
Bepec
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 7591


W7 x64, Qt SDK 4.7.2, Руки v1.5


Просмотр профиля
« Ответ #3 : Сентябрь 22, 2017, 14:38 »

А с чего вы взяли что память течёт?
Записан

"Мастер простых решений" Ɋt

чОрный список: Spark
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  

Страница сгенерирована за 0.071 секунд. Запросов: 22.