Как правильно использовать Qt beginInsertRows - PullRequest
0 голосов
/ 20 марта 2019

У меня есть мои пользовательские 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();
}

1 Ответ

0 голосов
/ 25 марта 2019

Как указывает выделенный вами документ, вам нужно вызывать эти две функции при повторной реализации виртуальной функции QAbstractItemModel::insertRows

https://doc.qt.io/qt-5/qabstractitemmodel.html#insertRows

Что, очевидно, не то, что вы делаете вВаша ItemModel :: Вставить функцию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...