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

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

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

Спасибо большое! -- Дэни.


person Dany Joumaa    schedule 16.01.2011    source источник
comment
Снова взглянув на этот вопрос, я понимаю, что просто перегорел, когда писал его: P Мой вопрос простыми словами: как мне добавить новую строку в мой подкласс QAbstractItemModel?   -  person Dany Joumaa    schedule 16.01.2011


Ответы (2)


Просто измените хранилище данных вашей модели между 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
person Frank Osterfeld    schedule 16.01.2011
comment
Это сработало просто отлично, и это был приятный прорыв, чтобы наконец увидеть некоторые элементы в моем представлении списка. Однако я потратил буквально полтора дня, пытаясь во всем этом разобраться, и теперь моя последняя проблема заключается в попытке отобразить набор данных 1x4. В настоящее время он показывает только один столбец данных и ни один из моих заголовков столбцов. Есть ли у вас какие-либо указания на то, что происходит не так? Я почти полностью разочарован тем, как сложно заставить Qt делать что-то такое простое, как список данных. — Дени. - person Dany Joumaa; 16.01.2011
comment
@nessup: QListView поддерживает только один столбец. Если вам нужно несколько столбцов и заголовков, вам нужно использовать QTreeView или QTableView. - person Frank Osterfeld; 17.01.2011

Боюсь, вам придется сделать это таким образом. Из документов:

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

person mtvec    schedule 16.01.2011
comment
эти ссылки мертвы - person Aidenhjj; 24.03.2017