Здравствуйте, гость ( Вход | Регистрация )
![]() ![]() |
|
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, 15:33) Link gmurik2, QList<QTableWidgetItem *> QTableWidget::findItems ( const QString & text, Qt::MatchFlags flags ) const не пробовал? Нет не пробовал, но честно говоря не совсем понял, чем мне это поможет |
|
|
|
|
kwisp |
27.5.2009, 13:08
Сообщение
#4
|
|
астарожна ынтжинэр ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 1404 Регистрация: 26.11.2008 Из: ТаганрогРодинаЧехова Пользователь №: 435 Спасибо сказали: 113 раз(а) Репутация: 23
|
Цитата(gmurik2 @ 27.5.2009, 12:57) Link 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) Link 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
|
Цитата(gmurik2 @ 27.5.2009, 14:30) Link и наверно сделав QList<QTableWidgetItem *> QTableWidget::findItems ( const QString & text, Qt::MatchFlags flags ) const я получу те же яйца, только вид сбоку наверное получишь а clearSpans() зачем вызывается после него интересно вообще доступ к элементу по ->item(int r,int c) осуществим? если нет то вот это Цитата(gmurik2 @ 27.5.2009, 12:57) Link 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,
а в циклах разве верно написано условие Цитата(gmurik2 @ 27.5.2009, 12:57) Link (int i = ui.ActiveOrdersTable->rowCount(); i >= 0; i--) пусть 4 строки. за номерами 0,1,2,3 а первая удаляемая будет за номером 4. при таком раскладе . поправь если я ошибаюсь. |
|
|
|
|
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. поищи по форуму схожие темы. |
|
|
|
![]() ![]() ![]() |
|
Текстовая версия | Сейчас: 29.12.2025, 9:24 |