crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в данную темуНачать новую тему
> QTableView очистка памяти
mevn
  опции профиля:
сообщение 24.12.2013, 12:40
Сообщение #1


Новичок


Группа: Новичок
Сообщений: 4
Регистрация: 24.12.2013
Пользователь №: 4016

Спасибо сказали: 0 раз(а)




Репутация:   0  


Добрый день.
Не подскажете ли, как можно решить следующую проблему.
Имеется таблица
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
  опции профиля:
сообщение 26.12.2013, 19:03
Сообщение #2


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9656
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


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

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


во-первых:
прокрути цикл (в голове или на бумаге), какой элемент ты удаляешь во второй проход, в третий, ... ?
(не забывай, что с каждым циклом у тебя кол-во элементов уменьшается)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
mevn
  опции профиля:
сообщение 27.12.2013, 18:26
Сообщение #3


Новичок


Группа: Новичок
Сообщений: 4
Регистрация: 24.12.2013
Пользователь №: 4016

Спасибо сказали: 0 раз(а)




Репутация:   0  


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

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


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



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

Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 29.1.2020, 23:56