Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: OS2 от Май 19, 2010, 18:07



Название: Утечка памяти в QTableWidget
Отправлено: OS2 от Май 19, 2010, 18:07
Всем доброго времени суток!
Столкнулся с непонятной утечкой памяти при удалении\добавлении строк в таблицу QTableWidget.
Имеется: указатель на объект, типа QTableWidget (с именем tableWidget_SM), в него добавляются элементы, типа QTableWidgetItem (у меня простая таблица, состоящая из N строк и 1 столбца). Как только кол-во элементов(строк) в таблице становится равным определенной величине, происходит удаление первой строки и уменьшение общего кол-ва строк на 1. Код ниже:

Код
C++ (Qt)
void CMyDlg::AddMessage( const QString &text )
{
static QFont fontMessage = QFont( "Tahoma", 8 );
tableWidget_SM->setUpdatesEnabled( false );
 
const QString szText = QString("> %1").arg(text);
const int i = tableWidget_SM->rowCount();
 
if( i == 2000 )
{
QTableWidgetItem *pDelitem = tableWidget_SM->takeItem( 0, 0 );
delete pDelitem;
 
tableWidget_SM->removeRow( 0 );
tableWidget_SM->setRowCount( 1999 );
}
 
tableWidget_SM->insertRow( i );
 
QTableWidgetItem* pColumn = new QTableWidgetItem();
pColumn->setFont( fontMessage );
pColumn->setText( szText );
 
tableWidget_SM->setItem( i, 0, pColumn );
tableWidget_SM->setUpdatesEnabled( true );
}

По идее все должно быть нормально и утечки памяти быть не должно(я же удаляю каждый раз объект QTableWidgetItem), однако на практике программа активно жрёт ресурсы (сообщения AddMessage() у меня могут приходить часто ~1000 раз в секунду).
Что в моем коде не верно? Подскажите, плизз…




Название: Re: Утечка памяти в QTableWidget
Отправлено: spectre71 от Май 19, 2010, 18:40
        const int i = tableWidget_SM->rowCount();
Код:
         int i = tableWidget_SM->rowCount(); 

if( i == 2000 )
{
QTableWidgetItem *pDelitem = tableWidget_SM->takeItem( 0, 0 );
delete pDelitem;
 
tableWidget_SM->removeRow( 0 ); //удаляет строку
tableWidget_SM->setRowCount( 1999 ); // какой смысл  в этом
// чему здесь равен  tableWidget_SM->rowCount() == 1999 ; и чему i == 2000 !!!
                i--;
}
 


Название: Re: Утечка памяти в QTableWidget
Отправлено: Kolobok от Май 19, 2010, 18:49
Оправданно ли использование QTableWidget при такой большой активности?


Название: Re: Утечка памяти в QTableWidget
Отправлено: OS2 от Июнь 02, 2010, 13:24
 :)