утечка памяти в QTableWidget + QSqlQuery |
Здравствуйте, гость ( Вход | Регистрация )
утечка памяти в QTableWidget + QSqlQuery |
gmurik2 |
27.5.2009, 11:57
Сообщение
#1
|
Студент Группа: Участник Сообщений: 23 Регистрация: 21.5.2009 Пользователь №: 764 Спасибо сказали: 0 раз(а) Репутация: 0 |
Вот есть некий код
и соответственно идет утечка памяти по каждому срабатыванию таймера, подскажите где вилы зарыты |
|
|
kwisp |
27.5.2009, 12:33
Сообщение
#2
|
астарожна ынтжинэр Группа: Участник Сообщений: 1404 Регистрация: 26.11.2008 Из: ТаганрогРодинаЧехова Пользователь №: 435 Спасибо сказали: 113 раз(а) Репутация: 23 |
gmurik2,
QList<QTableWidgetItem *> QTableWidget::findItems ( const QString & text, Qt::MatchFlags flags ) const не пробовал? |
|
|
gmurik2 |
27.5.2009, 13:04
Сообщение
#3
|
Студент Группа: Участник Сообщений: 23 Регистрация: 21.5.2009 Пользователь №: 764 Спасибо сказали: 0 раз(а) Репутация: 0 |
|
|
|
kwisp |
27.5.2009, 13:08
Сообщение
#4
|
астарожна ынтжинэр Группа: Участник Сообщений: 1404 Регистрация: 26.11.2008 Из: ТаганрогРодинаЧехова Пользователь №: 435 Спасибо сказали: 113 раз(а) Репутация: 23 |
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); } вместо этого можно найти все элементы через QList<QTableWidgetItem *> QTableWidget::findItems ( const QString & text, Qt::MatchFlags flags ) const во флагах( Qt::MatchFlags) есть возможность использовать регулярные выраежния. |
|
|
gmurik2 |
27.5.2009, 13:30
Сообщение
#5
|
Студент Группа: Участник Сообщений: 23 Регистрация: 21.5.2009 Пользователь №: 764 Спасибо сказали: 0 раз(а) Репутация: 0 |
Придется, наверно, немного рассказать, что делает мой код:
в функции setActiveOrdersTable_Apply() происходит заполнение таблицы ActiveOrdersTable из запроса query. далее эта таблица обновляется с некоторой периодичностью по сигналу таймера.
updateActOrdersTable() удаляет все записи, из таблицы, и вызывает setActiveOrdersTable_Apply(). и наверно сделав QList<QTableWidgetItem *> QTableWidget::findItems ( const QString & text, Qt::MatchFlags flags ) const я получу те же яйца, только вид сбоку |
|
|
kwisp |
27.5.2009, 13:48
Сообщение
#6
|
астарожна ынтжинэр Группа: Участник Сообщений: 1404 Регистрация: 26.11.2008 Из: ТаганрогРодинаЧехова Пользователь №: 435 Спасибо сказали: 113 раз(а) Репутация: 23 |
и наверно сделав QList<QTableWidgetItem *> QTableWidget::findItems ( const QString & text, Qt::MatchFlags flags ) const я получу те же яйца, только вид сбоку наверное получишь а clearSpans() зачем вызывается после него интересно вообще доступ к элементу по ->item(int r,int c) осуществим? если нет то вот это 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:58
Сообщение
#7
|
Студент Группа: Участник Сообщений: 23 Регистрация: 21.5.2009 Пользователь №: 764 Спасибо сказали: 0 раз(а) Репутация: 0 |
Цитата а clearSpans() зачем вызывается после него интересно вообще доступ к элементу по ->item(int r,int c) осуществим? если нет то вот это доступ осуществим, а вызываю чтобы убрать объединения столбцов, потому как при следующем заполнении таблицы они остаются. Но даже если убрать clearSpans() - память утекает со скоростью 16 кб в 5сек, т.е. с той же скоростью что и с ним может подойдем к решению вопроса другим путем, как заполнить QTableWidget данными и периодически их обновлять, но без проблемы утечки памяти? |
|
|
kwisp |
27.5.2009, 14:13
Сообщение
#8
|
астарожна ынтжинэр Группа: Участник Сообщений: 1404 Регистрация: 26.11.2008 Из: ТаганрогРодинаЧехова Пользователь №: 435 Спасибо сказали: 113 раз(а) Репутация: 23 |
|
|
|
gmurik2 |
27.5.2009, 14:38
Сообщение
#9
|
Студент Группа: Участник Сообщений: 23 Регистрация: 21.5.2009 Пользователь №: 764 Спасибо сказали: 0 раз(а) Репутация: 0 |
да действительно не верно И как винда это пропустила
исправил (int i = ui.ActiveOrdersTable->rowCount()-1; i >= 0; i--) ситуация не изменилась... пробовал чистить таблицу еще и так
тоже самое |
|
|
kwisp |
27.5.2009, 14:50
Сообщение
#10
|
астарожна ынтжинэр Группа: Участник Сообщений: 1404 Регистрация: 26.11.2008 Из: ТаганрогРодинаЧехова Пользователь №: 435 Спасибо сказали: 113 раз(а) Репутация: 23 |
gmurik2,
ну не знаю куда деваются 16Кб в 5 сек 1. воспользовавшись QTableWidget::findItems узнай размер списка всех элементов таблицы сравни с добавляемыми и удаляемыми если колличества равны то причина не в элементах. 2. проверь баг трекер троллей. 3. попробуй грохать всю таблицу и оцени результат может увидишь что-то полезное. 4. поищи по форуму схожие темы. |
|
|
Текстовая версия | Сейчас: 27.11.2024, 2:10 |