У меня есть мои пользовательские ItemModel
и ItemDelegate
:
class ItemModel : public QAbstractListModel {
Q_OBJECT
public:
// return items_.size();
int rowCount(const QModelIndex &parent = QModelIndex()) const;
// return items_[index.row()];
QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const;
void Insert(const QVector<QString> &data);
private:
QVector<QString> items_;
};
void ItemModel::Insert(const QVector<QString> &data) {
// my question is the 'first' and 'last' args of beginInsertRows
beginInsertRows(QModelIndex(), 0, 0);
items_.insert(items_.begin(), data.begin(), begin.end());
endInsertRows();
}
Из Документация Qt , говорят, beginInsertRows
имеет три аргумента:
void QAbstractItemModel :: beginInsertRows (const QModelIndex & parent, int first, int last)
Начинает операцию вставки строки.
При переопределении insertRows () в подклассе вы должны вызвать эту функцию перед вставкой данныхв хранилище данных модели.
Родительский индекс соответствует родительскому, в который вставляются новые строки;первый и последний - номера строк, которые будут иметь новые строки после их вставки.
Я не уверен, как передать last
и first
в моем ItemModel::Insert
, что угодноразмер вставленных данных равен 0 или 10 или другому количеству, я передаю first = 0
и last = 0
, представление работает правильно.Когда я вставляю 10 элементов и передаю first = 0
и last = 9
, представление также работает правильно.Это смущает меня.
void ItemModel::Insert() {
beginInsertRows(QModelIndex(), 0, 0);
for(int i = 0; i < 10; ++i) {
items_.push_back(QString::number(i);
}
endInsertRows();
}
// or
void ItemModel::Insert() {
beginInsertRows(QModelIndex(), 0, 9);
for(int i = 0; i < 10; ++i) {
items_.push_back(QString::number(i));
}
endInsertRows();
}