Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: smartchecker от Ноябрь 27, 2009, 00:30



Название: QTableWidget. Удалить все строки. Как?
Отправлено: smartchecker от Ноябрь 27, 2009, 00:30
Собственно, как в QTableWidget удалить все строки?


Название: Re: QTableWidget. Удалить все строки. Как?
Отправлено: Alex Custov от Ноябрь 27, 2009, 01:10
Собственно, как в QTableWidget удалить все строки?

clear() ?


Название: Re: QTableWidget. Удалить все строки. Как?
Отправлено: smartchecker от Ноябрь 27, 2009, 01:36
Нет, clear() стирает содержимое, а я хочу  removeRow() только такой, который все сразу удаляет.


Название: Re: QTableWidget. Удалить все строки. Как?
Отправлено: Павел_F. от Ноябрь 27, 2009, 08:41
Код:
QTableWidget table;
...
table.clear();
table.setRowCount( 0);
Так, например.


Название: Re: QTableWidget. Удалить все строки. Как?
Отправлено: smartchecker от Декабрь 18, 2009, 11:15
Так не удаляет.
Так только чистит.
Единственный способ, который я вижу в цикле делать removeRow() и removeCol()
Поправьте, если ошибаюсь.


Название: Re: QTableWidget. Удалить все строки. Как?
Отправлено: pastor от Декабрь 18, 2009, 12:45
Открывакем исходник QTableWidget и смотрим:

Код
C++ (Qt)
void QTableWidget::clear()
{
   Q_D(QTableWidget);
   selectionModel()->clear();
   d->model()->clear();
}

Смотрим что происходит в моделе:

Код
C++ (Qt)
void QTableModel::clear()
{
   for (int j = 0; j < verticalHeaderItems.count(); ++j) {
       if (verticalHeaderItems.at(j)) {
           verticalHeaderItems.at(j)->view = 0;
           delete verticalHeaderItems.at(j);
           verticalHeaderItems[j] = 0;
       }
   }
   for (int k = 0; k < horizontalHeaderItems.count(); ++k) {
       if (horizontalHeaderItems.at(k)) {
           horizontalHeaderItems.at(k)->view = 0;
           delete horizontalHeaderItems.at(k);
           horizontalHeaderItems[k] = 0;
       }
   }
   clearContents();
}
 
void QTableModel::clearContents()
{
   for (int i = 0; i < tableItems.count(); ++i) {
       if (tableItems.at(i)) {
           tableItems.at(i)->view = 0;
           delete tableItems.at(i);
           tableItems[i] = 0;
       }
   }
   reset();
}

И о чудо, все удалается. ))) Но только:

Цитировать
The table dimensions stay the same.

Еще раз обращаем внимание на пост Павел_F.