2011-01-16 2 views
11

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

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

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

+1

После снова глядя на этот вопрос, я понимаю, что просто сгорел, когда я написал: P Мой вопрос в простых словах: как сделать Я добавляю новую строку в мой подкласс QAbstractItemModel? –

ответ

15

Просто измените хранилище данных вашей модели, начиная с 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 
+0

Это сработало отлично, и это был приятный прорыв, чтобы наконец увидеть некоторые элементы в моем списке. Тем не менее, я потратил буквально полтора дня, пытаясь понять все это, и теперь моя последняя проблема заключается в том, чтобы отобразить набор данных 1x4. В настоящее время он отображает только данные с одним столбцом и ни один из моих заголовков столбцов. У вас есть какие-то указания на то, что происходит не так? Я почти полностью разочарован тем, как трудно заставить Qt делать что-то столь же простое, как данные списка .-- Дани. –

+3

@nessup: QListView поддерживает только один столбец. Если вам нужны несколько столбцов и заголовков, вам нужно использовать QTreeView или QTableView. –

1

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

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

+0

Эти ссылки мертвы – Aidenhjj