Russian Qt Forum
Сентябрь 30, 2024, 14:27 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: QTableWidget. Удалить все строки. Как?  (Прочитано 12773 раз)
smartchecker
Гость
« : Ноябрь 27, 2009, 00:30 »

Собственно, как в QTableWidget удалить все строки?
Записан
Alex Custov
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2063


Просмотр профиля
« Ответ #1 : Ноябрь 27, 2009, 01:10 »

Собственно, как в QTableWidget удалить все строки?

clear() ?
Записан
smartchecker
Гость
« Ответ #2 : Ноябрь 27, 2009, 01:36 »

Нет, clear() стирает содержимое, а я хочу  removeRow() только такой, который все сразу удаляет.
Записан
Павел_F.
Гость
« Ответ #3 : Ноябрь 27, 2009, 08:41 »

Код:
QTableWidget table;
...
table.clear();
table.setRowCount( 0);
Так, например.
Записан
smartchecker
Гость
« Ответ #4 : Декабрь 18, 2009, 11:15 »

Так не удаляет.
Так только чистит.
Единственный способ, который я вижу в цикле делать removeRow() и removeCol()
Поправьте, если ошибаюсь.
Записан
pastor
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 2901



Просмотр профиля WWW
« Ответ #5 : Декабрь 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.
Записан

Integrated Computer Solutions, Inc. (ICS)
http://www.ics.com/
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.336 секунд. Запросов: 23.