Russian Qt Forum

Qt => Model-View (MV) => Тема начата: Day от Март 09, 2018, 14:35



Название: Добавление строк в QTableView (РЕШЕНО)
Отправлено: Day от Март 09, 2018, 14:35
Хранилищем данных в моей модели является некая самопальная структура (Типа StringList)
Когда я пытаюсь добавить строку в таблицу, я добавляю в эту структуру элемент средствами, не использующими Qt, Т.е. без всяких InsertRow. И данные добавляются (проверял), и rowCount() дает правильное значение, и запись в базу данных (тоже самопальную) происходит. Только вот визуально в таблице их нет. То есть Вьюха не знает, что строки добавлены. Я вставил логирование в метод модели date(), но там происходит обращение только до старого количества строк ( ind.row())
Qt 4.5.2. И методов beginResetModel() и endResetModel() нет. Есть modelReset(), reset() и modelAboutToBeReset(). Вопрос - как их грамотно использовать?


Название: Re: Добавление строк в QTableView
Отправлено: Day от Март 09, 2018, 23:25
Я в тупике. Все эти методы - protected
tableView->reset() и tableView->update(QModelIndex()) никакого эффекта не дали.
Как же сообщить ему, что в модели появилась еще одна строка?


Название: Re: Добавление строк в QTableView
Отправлено: Day от Март 10, 2018, 00:34
Все получилось!!!
В моей модели, унаследованной от QAbstractTableModel просто метод
Код:
public:
void R() { reset(); }


Название: Re: Добавление строк в QTableView
Отправлено: Bepec от Март 10, 2018, 02:38
Вьюха знает об обновлении только по сигналам модели.

Reset в данном случае - очень плохой метод, т.к. перетряхивает все данные модели.

Вам нужно использовать методы модели. Это стандартные методы модели, которые являются обёрткой для сигналов.

Для вставки новой строки beginInsert, endInsert. (row/column)

Код:
    beginInsertRows(index(rowCount(),0), rowCount(), rowCount()+ 1);
    // тут вставляете данные
    rootItem->appendChild(item);
    endInsertRows();
Для изменения уже существующих dataChanged.
Код:
    rootItem->child(row)->infoStruct.name = name;
    dataChanged(index(row,1),index(row,1));
Для удаления beginRemove, endRemove. (row/column)
Тут всё аналогично с инсертом.

Без использования этих методов модели бесполезны и даже вредны. Тут главное понять смысл их использования и потом всё легче лёгкого.


 


Название: Re: Добавление строк в QTableView
Отправлено: Day от Март 10, 2018, 11:27
Верес, Большое спасибо за разъяснения!
Тут на меня какое-то затмение нашло. Смутило то, что все эти методы - protected. Видать, от перегрева. И не допер до простого. Наследуемся от QAbstactItemModel, и они все доступны!
А с применениями всех этих методов, да, буду разбираться.
Главное - я понял, что все эти методы можно применять только в методах моей модели