crossplatform.ru

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


  Ответ в утечка памяти в QTableWidget + QSqlQuery
Введите ваше имя
Подтвердите код

Введите в поле код из 6 символов, отображенных в виде изображения. Если вы не можете прочитать код с изображения, нажмите на изображение для генерации нового кода.
 

Опции сообщения
 Включить смайлы?
Иконки сообщения
(Опционально)
                                
                                
  [ Без иконки ]
 


Последние 10 сообщений [ в обратном порядке ]
SABROG Дата 28.5.2009, 8:09
 
Цитата(gmurik2 @ 28.5.2009, 8:05) *
Цитата
Поставь себе Purify Plus от IBM и смотри где утечки идут. Взять можно на торрентс ру с ключиком.


А MinGW поддерживается?

А ему всё равно какой компилятор, он сразу на exe'шнике работает, причем не важно debug или release.
gmurik2 Дата 28.5.2009, 7:05
 
Цитата
Поставь себе Purify Plus от IBM и смотри где утечки идут. Взять можно на торрентс ру с ключиком.


А MinGW поддерживается?
SABROG Дата 27.5.2009, 15:01
  Поставь себе Purify Plus от IBM и смотри где утечки идут. Взять можно на торрентс ру с ключиком.
kwisp Дата 27.5.2009, 14:50
  gmurik2,
ну не знаю куда деваются 16Кб в 5 сек
1. воспользовавшись QTableWidget::findItems узнай размер списка всех элементов таблицы сравни с добавляемыми и удаляемыми если колличества равны то причина не в элементах.
2. проверь баг трекер троллей.
3. попробуй грохать всю таблицу и оцени результат может увидишь что-то полезное.
4. поищи по форуму схожие темы.
gmurik2 Дата 27.5.2009, 14:38
  да действительно не верно :) И как винда это пропустила ;)

исправил
(int i = ui.ActiveOrdersTable->rowCount()-1; i >= 0; i--)

ситуация не изменилась... :(

пробовал чистить таблицу еще и так

for(int i = ui.ActiveOrdersTable->rowCount()-1; i >= 0; i--) {
                for(int j = ui.ActiveOrdersTable->columnCount()-1; j >= 0; j--) {
                    delete ui.ActiveOrdersTable->takeItem(i,j);
                }
                ui.ActiveOrdersTable->removeRow(i);
    }
        ui.ActiveOrdersTable->clear();
        setActiveOrdersTable_Apply();


тоже самое
kwisp Дата 27.5.2009, 14:13
  gmurik2,
а в циклах разве верно написано условие
Цитата(gmurik2 @ 27.5.2009, 12:57) *
(int i = ui.ActiveOrdersTable->rowCount(); i >= 0; i--)


пусть 4 строки. за номерами 0,1,2,3
а первая удаляемая будет за номером 4.
при таком раскладе .
поправь если я ошибаюсь.
gmurik2 Дата 27.5.2009, 13:58
 
Цитата
а clearSpans()
зачем вызывается
после него интересно вообще доступ к элементу по ->item(int r,int c) осуществим?
если нет то вот это


доступ осуществим, а вызываю чтобы убрать объединения столбцов, потому как при следующем заполнении таблицы они остаются.
Но даже если убрать clearSpans() - память утекает со скоростью 16 кб в 5сек, т.е. с той же скоростью что и с ним ;)

может подойдем к решению вопроса другим путем, как заполнить QTableWidget данными и периодически их обновлять, но без проблемы утечки памяти?
kwisp Дата 27.5.2009, 13:48
 
Цитата(gmurik2 @ 27.5.2009, 14:30) *
и наверно сделав QList<QTableWidgetItem *> QTableWidget::findItems ( const QString & text, Qt::MatchFlags flags ) const я получу те же яйца, только вид сбоку


наверное получишь:)


а clearSpans()
зачем вызывается
после него интересно вообще доступ к элементу по ->item(int r,int c) осуществим?
если нет то вот это
Цитата(gmurik2 @ 27.5.2009, 12:57) *
for(int i = ui.ActiveOrdersTable->rowCount(); i >= 0; i--) {
for(int j = ui.ActiveOrdersTable->columnCount(); j >= 0; j--) {
delete ui.ActiveOrdersTable->item(i,j);
}
ui.ActiveOrdersTable->removeRow(i);
}

не сработает ниразу.
gmurik2 Дата 27.5.2009, 13:30
  Придется, наверно, немного рассказать, что делает мой код:

в функции setActiveOrdersTable_Apply() происходит заполнение таблицы ActiveOrdersTable из запроса query.
далее эта таблица обновляется с некоторой периодичностью по сигналу таймера.

upTimer = new QTimer(this);
upTimer->start(5000);
connect(upTimer, SIGNAL(timeout()), SLOT(updateActOrdersTable()));


updateActOrdersTable()
удаляет все записи, из таблицы, и вызывает setActiveOrdersTable_Apply().

и наверно сделав QList<QTableWidgetItem *> QTableWidget::findItems ( const QString & text, Qt::MatchFlags flags ) const я получу те же яйца, только вид сбоку
kwisp Дата 27.5.2009, 13:08
 
Цитата(gmurik2 @ 27.5.2009, 12:57) *
for(int i = ui.ActiveOrdersTable->rowCount(); i >= 0; i--) {
for(int j = ui.ActiveOrdersTable->columnCount(); j >= 0; j--) {
delete ui.ActiveOrdersTable->item(i,j);
}
ui.ActiveOrdersTable->removeRow(i);
}

вместо этого можно найти все элементы через
Цитата(kwisp @ 27.5.2009, 13:33) *
QList<QTableWidgetItem *> QTableWidget::findItems ( const QString & text, Qt::MatchFlags flags ) const

во флагах( Qt::MatchFlags) есть возможность использовать регулярные выраежния.
Просмотр темы полностью (откроется в новом окне)
RSS Текстовая версия Сейчас: 28.3.2024, 17:17