Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: QTableView очистка памяти
Форум на CrossPlatform.RU > Библиотеки > Qt > Qt Общие вопросы
mevn
Добрый день.
Не подскажете ли, как можно решить следующую проблему.
Имеется таблица
class SqlDBTbl : public QObject
{
    Q_OBJECT
protected:
    QStandardItemModel    model;               ///< модель для хранения данных
    QItemSelectionModel    sel_model;           ///< модель для управления выделением записей
    QTableView            *table;               ///< таблица для отображения данных
...

Данная таблица заполняется данными.
Необходимо чистить память занимаемую этой таблицей. Пробовал так
        if(table)
    {
    
        while (model.rowCount())
        {    
            for(int ii = 0; ii< model.columnCount();ii++ )
            {
                delete model.item(0,ii);
        
            }
            model.removeRow(0 );
        }
        model.clear();
        table->setModel(&model);
        table->reset();
    
    }

Таблица очищается память не высвобождается
Litkevich Yuriy
Цитата(mevn @ 24.12.2013, 14:40) *
Таблица очищается память не высвобождается

2) Qt не всегда возвращает память ОС (чтобы в следующий раз её не запрашивать);
3) ОС не всегда забирает высвободившуюся память у приложения в кучу (а вдруг приложение опять начнёт просить выделить память).
Посему простейшие средства оценки, типа диспетчера задач, для отслеживания подобных ситуаций не годятся.


во-первых:
прокрути цикл (в голове или на бумаге), какой элемент ты удаляешь во второй проход, в третий, ... ?
(не забывай, что с каждым циклом у тебя кол-во элементов уменьшается)
mevn
Цитата(Litkevich Yuriy @ 26.12.2013, 20:03) *
Цитата(mevn @ 24.12.2013, 14:40) *
Таблица очищается память не высвобождается

2) Qt не всегда возвращает память ОС (чтобы в следующий раз её не запрашивать);
3) ОС не всегда забирает высвободившуюся память у приложения в кучу (а вдруг приложение опять начнёт просить выделить память).
Посему простейшие средства оценки, типа диспетчера задач, для отслеживания подобных ситуаций не годятся.


во-первых:
прокрути цикл (в голове или на бумаге), какой элемент ты удаляешь во второй проход, в третий, ... ?
(не забывай, что с каждым циклом у тебя кол-во элементов уменьшается)



Спасибо, что сказали).
Это реальное решение проблемы. Бился над ней пару дней (правда решил до Вашего ответа, но все равно СПАСИБО!!! Вы правы).
Обнаружил возврат памяти, когда загрузил компмемори по полной (несколько виртуальных машин, плюс все все все, процнетов на 96)
После этого все заработало как ожидальсь...

Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Форум IP.Board © 2001-2024 IPS, Inc.