Вот есть некий код
setActiveOrdersTable_Apply() {
QSqlQuery *query = new QSqlQuery();
if(!query->exec(
tr("SELECT ..."))) {
QMessageBox::information(0,"Error", query->lastError().databaseText());
}
QString OrderState = "";
int row;
while(query->next()) {
if(query->value(10).toString() != OrderState) {
OrderState = query->value(10).toString();
row = ui.ActiveOrdersTable->rowCount();
ui.ActiveOrdersTable->insertRow(row);
ui.ActiveOrdersTable->setSpan(row,0,1,ui.ActiveOrdersTable->columnCount());
ui.ActiveOrdersTable->setItem(row,0,new QTableWidgetItem(query->value(10).toString()));
ui.ActiveOrdersTable->item(row,0)->setTextAlignment(Qt::AlignCenter | Qt::AlignVCenter);
ui.ActiveOrdersTable->item(row,0)->setFlags(Qt::NoItemFlags);
ui.ActiveOrdersTable->item(row,0)->setBackgroundColor(QColor("#f9f99e"));
}
row = ui.ActiveOrdersTable->rowCount();
ui.ActiveOrdersTable->insertRow(row);
ui.ActiveOrdersTable->setItem(row,0,new QTableWidgetItem(query->value(0).toString()));
ui.ActiveOrdersTable->item(row,0)->setTextAlignment(Qt::AlignRight | Qt::AlignVCenter);
ui.ActiveOrdersTable->item(row,0)->setFlags(Qt::ItemIsSelectable);
и.т.п копипаст последних 3 строк
}
ui.ActiveOrdersTable->resizeRowsToContents();
delete query;
}
далее по таймеру вызываю
void TaxSyst::updateActOrdersTable() {
int selRow = ui.ActiveOrdersTable->currentRow();
ui.ActiveOrdersTable->clearSpans();
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);
}
setActiveOrdersTable_Apply();
}
gmurik2,
QList<QTableWidgetItem *> QTableWidget::findItems ( const QString & text, Qt::MatchFlags flags ) const
не пробовал?
Придется, наверно, немного рассказать, что делает мой код:
в функции setActiveOrdersTable_Apply() происходит заполнение таблицы ActiveOrdersTable из запроса query.
далее эта таблица обновляется с некоторой периодичностью по сигналу таймера.
upTimer = new QTimer(this);
upTimer->start(5000);
connect(upTimer, SIGNAL(timeout()), SLOT(updateActOrdersTable()));
gmurik2,
а в циклах разве верно написано условие
да действительно не верно И как винда это пропустила
исправил
(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();
gmurik2,
ну не знаю куда деваются 16Кб в 5 сек
1. воспользовавшись QTableWidget::findItems узнай размер списка всех элементов таблицы сравни с добавляемыми и удаляемыми если колличества равны то причина не в элементах.
2. проверь баг трекер троллей.
3. попробуй грохать всю таблицу и оцени результат может увидишь что-то полезное.
4. поищи по форуму схожие темы.
Поставь себе Purify Plus от IBM и смотри где утечки идут. Взять можно на торрентс ру с ключиком.
Форум Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)