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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: QAbstractTableModel и удаление строк  (Прочитано 6495 раз)
folibis
Гость
« : Июль 12, 2010, 06:45 »

есть таблица на основе QAbstractTableModel.
Код:
class TableModel : public QAbstractTableModel{
public:
TableModel(QObject *parent = 0);
~TableModel();
int rowCount(const QModelIndex &parent = QModelIndex()) const;
int columnCount(const QModelIndex &parent = QModelIndex()) const;
QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const;
QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const;
private:
int rowsCount;
int colsCount;
QList < QList<TableItem *> *> cells;
...
};

Мне нужно убрать строки, переопределять removeColumns я не стал, потому как строки убираются изутри класса.
удаляю так:
Код:
void TableModel::clearList() {
beginRemoveRows(QModelIndex(),0,rowsCount);
while (!cells.isEmpty())
{
QList<TableItem *> *row = cells.takeFirst();
if(row)
{
while(row->isEmpty()) delete (TableItem *)row->takeFirst();
row->clear();
delete row;
}

}
cells.clear();
endRemoveRows();
rowsCount = 0;
}
На деле почему то это не работает. т.е. если было например 10 строк с данными, то после вызова clearList() я вижу те же 10 строк только пустые. Выбрать их нельзя, но визуально они есть.
rowCount возвращает 0, beginRemoveRows и endRemoveRows я вызывал. почему же строки остались?
« Последнее редактирование: Июль 12, 2010, 08:19 от folibis » Записан
folibis
Гость
« Ответ #1 : Июль 12, 2010, 08:18 »

Вроде решил проблему. После endRemoveRows() надо было добавить emit layoutChanged();
Нашел после 3-х часов ковыряния исходников. Почему то в Assistant-е об этом ни слова.
Записан
lit-uriy
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3880


Просмотр профиля WWW
« Ответ #2 : Июль 12, 2010, 08:56 »

Почему то в Assistant-е об этом ни слова.
Цитировать
Как правило, начальные и конечные функции способны уведомлять другие компоненты об изменениях в базовой структуре модели. Для более сложных изменений в структуре модели, приводящие возможно к преобразованию или сортировке данных, необходимо испустить сигнал layoutChanged(), чтобы заставить все присоединенные представления обновиться.
тыц
Записан

Юра.
folibis
Гость
« Ответ #3 : Июль 13, 2010, 04:22 »

Да спасибо, этого то я как раз и не заметил
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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