Russian Qt Forum

Qt => Model-View (MV) => Тема начата: folibis от Июль 12, 2010, 06:45



Название: QAbstractTableModel и удаление строк
Отправлено: 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 я вызывал. почему же строки остались?


Название: Re: QAbstractItemModel и удаление строк
Отправлено: folibis от Июль 12, 2010, 08:18
Вроде решил проблему. После endRemoveRows() надо было добавить emit layoutChanged();
Нашел после 3-х часов ковыряния исходников. Почему то в Assistant-е об этом ни слова.


Название: Re: QAbstractTableModel и удаление строк
Отправлено: lit-uriy от Июль 12, 2010, 08:56
Почему то в Assistant-е об этом ни слова.
Цитировать
Как правило, начальные и конечные функции способны уведомлять другие компоненты об изменениях в базовой структуре модели. Для более сложных изменений в структуре модели, приводящие возможно к преобразованию или сортировке данных, необходимо испустить сигнал layoutChanged(), чтобы заставить все присоединенные представления обновиться.
тыц (http://doc.crossplatform.ru/qt/4.6.x/model-view-model-subclassing.html#resizable-models)


Название: Re: QAbstractTableModel и удаление строк
Отправлено: folibis от Июль 13, 2010, 04:22
Да спасибо, этого то я как раз и не заметил