Программное добавление новой строки в подкласс QAbstractListModel

Внутри уже созданного подкласса QAbstractListModel, как добавить строку с данными в каждом столбце и связать QListView с новой строкой?

Кажется, что единственный способ сделать это - переопределить insertRow и setData в моей модели, а затем взломать их вместе в какой-то последовательности в другой функции, чтобы добавить строку. Должен ли я это делать? Разумеется, Qt должен упростить добавление новой строки.

Спасибо большое! --Dany.

Ответ 1

Просто измените хранилище данных модели, между beginInsertRows() и endInsertRows().

Например, скажем, у вас есть модель с плоским списком, и ваша модель хранит данные внутри QVector m_data. Вы хотите добавить список, т.е. Вставить строку в позицию 0:

beginInsertRows( QModelIndex(), 0, 0 ); //notify views and proxy models that a line will be inserted
m_data.prepend( somedata ); // do the modification to the model data
endInsertRows(); //finish insertion, notify views/models

Ответ 2

Боюсь, вам нужно это сделать. Из docs:

Модели, предоставляющие интерфейсы для изменяемых по размерам структур данных в виде списка, могут обеспечить реализацию insertRows() и removeRows().