72void QStandardItemPrivate::setChild(
int row,
int column, QStandardItem *item,
77 qWarning(
"QStandardItem::setChild: Can't make an item a child of itself %p",
81 if ((row < 0) || (column < 0))
84 q->setRowCount(row + 1);
85 if (columns <= column)
86 q->setColumnCount(column + 1);
87 int index = childIndex(row, column);
88 Q_ASSERT(index != -1);
89 QStandardItem *oldItem = children.at(index);
93 if (model && emitChanged) {
94 emit model->layoutAboutToBeChanged();
98 if (item->d_func()->parent ==
nullptr) {
99 item->d_func()->setParentAndModel(q, model);
101 qWarning(
"QStandardItem::setChild: Ignoring duplicate insertion of item %p",
108 if (!item && oldItem)
109 oldItem->d_func()->setModel(
nullptr);
111 children.replace(index, item);
116 oldItem->d_func()->setModel(
nullptr);
120 item->d_func()->lastKnownIndex = index;
122 if (model && emitChanged)
123 emit model->layoutChanged();
125 if (emitChanged && model) {
127 model->d_func()->itemChanged(item);
129 const QModelIndex idx = model->index(row, column, q->index());
130 emit model->dataChanged(idx, idx);
133 notifyChildrenChanged();
205bool QStandardItemPrivate::setChildrenCheckState(
const QVariant &value)
208 if (rows == 0 || !value.isValid() || value.toInt() == Qt::PartiallyChecked
209 || !q->isAutoTristate()) {
213 const QScopedValueRollback guard(settingChildrenCheckState,
true);
214 bool changed =
false;
215 for (
int row = 0; row < rows; ++row) {
216 QStandardItem *child = q->child(row);
217 const QVariant oldState = child ? child->data(Qt::CheckStateRole) : QVariant();
218 if (oldState.isValid()) {
219 child->setData(value, Qt::CheckStateRole);
220 changed = changed || oldState.toInt() != value.toInt();
342void QStandardItemPrivate::setItemData(
const QMap<
int, QVariant> &roles)
346 auto byRole = [](
const QStandardItemData& item1,
const QStandardItemData& item2) {
347 return item1.role < item2.role;
350 const auto checkState = roles.constFind(Qt::CheckStateRole);
351 const bool hasCheckState = checkState != roles.cend();
352 const bool childrenChanged = hasCheckState && setChildrenCheckState(*checkState);
354 std::sort(values.begin(), values.end(), byRole);
357
358
359
360
361 QList<QStandardItemData> newValues;
362 newValues.reserve(values.size());
363 roleMapStandardItemDataUnion(roles.keyValueBegin(),
365 values.cbegin(), values.cend(),
366 std::back_inserter(newValues), ByNormalizedRole());
368 if (newValues != values) {
369 values.swap(newValues);
372 roleKeys.reserve(roles.size() + 1);
373 bool hasEditRole =
false;
374 bool hasDisplayRole =
false;
375 for (
auto it = roles.keyBegin(); it != roles.keyEnd(); ++it) {
376 roleKeys.push_back(*it);
377 if (*it == Qt::EditRole)
379 else if (*it == Qt::DisplayRole)
380 hasDisplayRole =
true;
382 if (hasEditRole && !hasDisplayRole)
383 roleKeys.push_back(Qt::DisplayRole);
384 else if (!hasEditRole && hasDisplayRole)
385 roleKeys.push_back(Qt::EditRole);
386 model->d_func()->itemChanged(q, roleKeys);
388 notifyAutoTristateAncestors();
390 }
else if (childrenChanged && model) {
391 model->d_func()->itemChanged(q, {Qt::CheckStateRole});
392 notifyAutoTristateAncestors();
419void QStandardItemPrivate::sortChildren(
int column, Qt::SortOrder order)
422 if (column >= columnCount())
425 QList<std::pair<QStandardItem*,
int> > sortable;
426 QList<
int> unsortable;
428 sortable.reserve(rowCount());
429 unsortable.reserve(rowCount());
431 for (
int row = 0; row < rowCount(); ++row) {
432 QStandardItem *itm = q->child(row, column);
434 sortable.emplace_back(itm, row);
436 unsortable.append(row);
439 if (order == Qt::AscendingOrder) {
440 QStandardItemModelLessThan lt;
441 std::stable_sort(sortable.begin(), sortable.end(), lt);
443 QStandardItemModelGreaterThan gt;
444 std::stable_sort(sortable.begin(), sortable.end(), gt);
447 QModelIndexList changedPersistentIndexesFrom, changedPersistentIndexesTo;
448 QList<QStandardItem*> sorted_children(children.size());
449 for (
int i = 0; i < rowCount(); ++i) {
450 int r = (i < sortable.size()
451 ? sortable.at(i).second
452 : unsortable.at(i - sortable.size()));
453 for (
int c = 0; c < columnCount(); ++c) {
454 QStandardItem *itm = q->child(r, c);
455 sorted_children[childIndex(i, c)] = itm;
457 QModelIndex from = model->createIndex(r, c, q);
458 if (model->d_func()->persistent.indexes.contains(from)) {
459 QModelIndex to = model->createIndex(i, c, q);
460 changedPersistentIndexesFrom.append(from);
461 changedPersistentIndexesTo.append(to);
467 children = sorted_children;
470 model->changePersistentIndexList(changedPersistentIndexesFrom, changedPersistentIndexesTo);
473 QList<QStandardItem*>::iterator it;
474 for (it = children.begin(); it != children.end(); ++it) {
476 (*it)->d_func()->sortChildren(column, order);
484void QStandardItemPrivate::setModel(QStandardItemModel *mod)
486 if (children.isEmpty()) {
488 model->d_func()->invalidatePersistentIndex(model->indexFromItem(q_ptr));
491 QStack<QStandardItem*> stack;
493 while (!stack.isEmpty()) {
494 QStandardItem *itm = stack.pop();
495 if (itm->d_func()->model) {
496 itm->d_func()->model->d_func()->invalidatePersistentIndex(itm->d_func()->model->indexFromItem(itm));
498 itm->d_func()->model = mod;
499 const QList<QStandardItem*> &childList = itm->d_func()->children;
500 for (
int i = 0; i < childList.size(); ++i) {
501 QStandardItem *chi = childList.at(i);
539void QStandardItemModelPrivate::_q_emitItemChanged(
const QModelIndex &topLeft,
540 const QModelIndex &bottomRight)
542 Q_Q(QStandardItemModel);
543 QModelIndex parent = topLeft.parent();
544 for (
int row = topLeft.row(); row <= bottomRight.row(); ++row) {
545 for (
int column = topLeft.column(); column <= bottomRight.column(); ++column) {
546 QModelIndex index = q->index(row, column, parent);
547 if (QStandardItem *item = itemFromIndex(index))
548 emit q->itemChanged(item);
556bool QStandardItemPrivate::insertRows(
int row,
const QList<QStandardItem*> &items)
559 if ((row < 0) || (row > rowCount()) || items.isEmpty())
561 int count = items.size();
563 model->d_func()->rowsAboutToBeInserted(q, row, row + count - 1);
564 if (rowCount() == 0) {
565 if (columnCount() == 0)
566 q->setColumnCount(1);
567 children.resize(columnCount() * count);
571 int index = childIndex(row, 0);
573 children.insert(index, columnCount() * count,
nullptr);
575 for (
int i = 0; i < items.size(); ++i) {
576 QStandardItem *item = items.at(i);
577 item->d_func()->setParentAndModel(q, model);
578 int index = childIndex(i + row, 0);
579 children.replace(index, item);
581 item->d_func()->lastKnownIndex = index;
584 model->d_func()->rowsInserted(q, row, count);
588bool QStandardItemPrivate::insertRows(
int row,
int count,
const QList<QStandardItem*> &items)
591 if ((count < 1) || (row < 0) || (row > rowCount()) || count == 0)
594 model->d_func()->rowsAboutToBeInserted(q, row, row + count - 1);
595 if (rowCount() == 0) {
596 children.resize(columnCount() * count);
600 int index = childIndex(row, 0);
602 children.insert(index, columnCount() * count,
nullptr);
604 if (!items.isEmpty()) {
605 int index = childIndex(row, 0);
606 int limit = qMin(items.size(), columnCount() * count);
607 for (
int i = 0; i < limit; ++i) {
608 QStandardItem *item = items.at(i);
610 if (item->d_func()->parent ==
nullptr) {
611 item->d_func()->setParentAndModel(q, model);
613 qWarning(
"QStandardItem::insertRows: Ignoring duplicate insertion of item %p",
618 children.replace(index, item);
620 item->d_func()->lastKnownIndex = index;
625 model->d_func()->rowsInserted(q, row, count);
632bool QStandardItemPrivate::insertColumns(
int column,
int count,
const QList<QStandardItem*> &items)
635 if ((count < 1) || (column < 0) || (column > columnCount()) || count == 0)
638 model->d_func()->columnsAboutToBeInserted(q, column, column + count - 1);
639 if (columnCount() == 0) {
640 children.resize(rowCount() * count);
644 int index = childIndex(0, column);
645 for (
int row = 0; row < rowCount(); ++row) {
646 children.insert(index, count,
nullptr);
647 index += columnCount();
650 if (!items.isEmpty()) {
651 int limit = qMin(items.size(), rowCount() * count);
652 for (
int i = 0; i < limit; ++i) {
653 QStandardItem *item = items.at(i);
655 if (item->d_func()->parent ==
nullptr) {
656 item->d_func()->setParentAndModel(q, model);
658 qWarning(
"QStandardItem::insertColumns: Ignoring duplicate insertion of item %p",
664 int c = column + (i % count);
665 int index = childIndex(r, c);
666 children.replace(index, item);
668 item->d_func()->lastKnownIndex = index;
672 model->d_func()->columnsInserted(q, column, count);
679void QStandardItemModelPrivate::itemChanged(QStandardItem *item,
const QList<
int> &roles)
681 Q_Q(QStandardItemModel);
683 if (item->d_func()->parent ==
nullptr) {
685 int idx = columnHeaderItems.indexOf(item);
687 emit q->headerDataChanged(Qt::Horizontal, idx, idx);
689 idx = rowHeaderItems.indexOf(item);
691 emit q->headerDataChanged(Qt::Vertical, idx, idx);
695 const QModelIndex index = q->indexFromItem(item);
696 emit q->dataChanged(index, index, roles);
1018void QStandardItem::setData(
const QVariant &value,
int role)
1021 role = (role == Qt::EditRole) ? Qt::DisplayRole : role;
1022 const QList<
int> roles((role == Qt::DisplayRole) ?
1023 QList<
int>({Qt::DisplayRole, Qt::EditRole}) :
1024 QList<
int>({role}));
1025 const bool childrenChanged = role == Qt::CheckStateRole && d->setChildrenCheckState(value);
1026 const bool wasAutoTristate = role == Qt::StandardItemFlagsRole && isAutoTristate();
1027 auto notifyModel = [&] {
1031 const bool autoTristateChanged = role == Qt::StandardItemFlagsRole
1032 && wasAutoTristate != isAutoTristate();
1033 const QList<
int> changedRoles = autoTristateChanged
1034 ? QList<
int>{role, Qt::CheckStateRole} : roles;
1035 d->model->d_func()->itemChanged(
this, changedRoles);
1036 if (role == Qt::CheckStateRole || autoTristateChanged)
1037 d->notifyAutoTristateAncestors();
1039 for (
auto it = d->values.begin(); it != d->values.end(); ++it) {
1040 if ((*it).role == role) {
1041 if (value.isValid()) {
1042 if ((*it).value.userType() == value.userType() && (*it).value == value) {
1043 if (childrenChanged)
1047 (*it).value = value;
1051 d->values.erase(it);
1057 d->values.append(QStandardItemData(role, value));
1915void QStandardItem::removeRows(
int row,
int count)
1918 if ((count < 1) || (row < 0) || ((row + count) > rowCount()))
1921 d->model->d_func()->rowsAboutToBeRemoved(
this, row, row + count - 1);
1922 int i = d->childIndex(row, 0);
1923 int n = count * d->columnCount();
1924 for (
int j = i; j < n+i; ++j) {
1925 QStandardItem *oldItem = d->children.at(j);
1927 oldItem->d_func()->setModel(
nullptr);
1930 d->children.remove(qMax(i, 0), n);
1933 d->model->d_func()->rowsRemoved(
this, row, count);
1942void QStandardItem::removeColumns(
int column,
int count)
1945 if ((count < 1) || (column < 0) || ((column + count) > columnCount()))
1948 d->model->d_func()->columnsAboutToBeRemoved(
this, column, column + count - 1);
1949 for (
int row = d->rowCount() - 1; row >= 0; --row) {
1950 int i = d->childIndex(row, column);
1951 for (
int j=i; j<i+count; ++j) {
1952 QStandardItem *oldItem = d->children.at(j);
1954 oldItem->d_func()->setModel(
nullptr);
1957 d->children.remove(i, count);
1959 d->columns -= count;
1961 d->model->d_func()->columnsRemoved(
this, column, count);
2021QStandardItem *QStandardItem::takeChild(
int row,
int column)
2024 QStandardItem *item =
nullptr;
2025 int index = d->childIndex(row, column);
2027 QModelIndex changedIdx;
2028 item = d->children.at(index);
2030 QStandardItemPrivate *
const item_d = item->d_func();
2032 QStandardItemModelPrivate *
const model_d = d->model->d_func();
2033 const int savedRows = item_d->rows;
2034 const int savedCols = item_d->columns;
2035 const QVector<QStandardItem*> savedChildren = item_d->children;
2036 if (savedRows > 0) {
2037 model_d->rowsAboutToBeRemoved(item, 0, savedRows - 1);
2039 item_d->children = QVector<QStandardItem*>();
2041 d->model->endRemoveRows();
2043 if (savedCols > 0) {
2044 model_d->columnsAboutToBeRemoved(item, 0, savedCols - 1);
2045 item_d->columns = 0;
2046 item_d->children = QVector<QStandardItem*>();
2047 d->model->endRemoveColumns();
2049 item_d->rows = savedRows;
2050 item_d->columns = savedCols;
2051 item_d->children = savedChildren;
2052 changedIdx = d->model->indexFromItem(item);
2054 item_d->setParentAndModel(
nullptr,
nullptr);
2056 d->children.replace(index,
nullptr);
2057 if (changedIdx.isValid())
2058 d->model->dataChanged(changedIdx, changedIdx);
2059 if (item && column == 0)
2060 d->notifyChildrenChanged();
2072QList<QStandardItem*> QStandardItem::takeRow(
int row)
2075 QList<QStandardItem*> items;
2076 if ((row < 0) || (row >= rowCount()))
2079 d->model->d_func()->rowsAboutToBeRemoved(
this, row, row);
2081 int index = d->childIndex(row, 0);
2083 int col_count = d->columnCount();
2084 items.reserve(col_count);
2085 for (
int column = 0; column < col_count; ++column) {
2086 QStandardItem *ch = d->children.at(index + column);
2088 ch->d_func()->setParentAndModel(
nullptr,
nullptr);
2091 d->children.remove(index, col_count);
2095 d->model->d_func()->rowsRemoved(
this, row, 1);
2106QList<QStandardItem*> QStandardItem::takeColumn(
int column)
2109 QList<QStandardItem*> items;
2110 if ((column < 0) || (column >= columnCount()))
2113 d->model->d_func()->columnsAboutToBeRemoved(
this, column, column);
2115 const int rowCount = d->rowCount();
2116 items.reserve(rowCount);
2117 for (
int row = rowCount - 1; row >= 0; --row) {
2118 int index = d->childIndex(row, column);
2119 QStandardItem *ch = d->children.at(index);
2121 ch->d_func()->setParentAndModel(
nullptr,
nullptr);
2122 d->children.remove(index);
2127 d->model->d_func()->columnsRemoved(
this, column, 1);
2159void QStandardItem::sortChildren(
int column, Qt::SortOrder order)
2162 if ((column < 0) || (rowCount() == 0))
2165 QList<QPersistentModelIndex> parents;
2168 emit d->model->layoutAboutToBeChanged(parents, QAbstractItemModel::VerticalSortHint);
2170 d->sortChildren(column, order);
2172 emit d->model->layoutChanged(parents, QAbstractItemModel::VerticalSortHint);
2368QStandardItemModel::QStandardItemModel(
int rows,
int columns, QObject *parent)
2369 : QAbstractItemModel(*
new QStandardItemModelPrivate, parent)
2371 Q_D(QStandardItemModel);
2373 d->root->insertColumns(0, columns);
2374 d->columnHeaderItems.insert(0, columns,
nullptr);
2375 d->root->insertRows(0, rows);
2376 d->rowHeaderItems.insert(0, rows,
nullptr);
2377 d->root->d_func()->setModel(
this);
2591void QStandardItemModel::setHorizontalHeaderItem(
int column, QStandardItem *item)
2593 Q_D(QStandardItemModel);
2596 if (columnCount() <= column)
2597 setColumnCount(column + 1);
2599 QStandardItem *oldItem = d->columnHeaderItems.at(column);
2600 if (item == oldItem)
2604 if (item->model() ==
nullptr) {
2605 item->d_func()->setModel(
this);
2607 qWarning(
"QStandardItem::setHorizontalHeaderItem: Ignoring duplicate insertion of item %p",
2614 oldItem->d_func()->setModel(
nullptr);
2617 d->columnHeaderItems.replace(column, item);
2618 emit headerDataChanged(Qt::Horizontal, column, column);
2647void QStandardItemModel::setVerticalHeaderItem(
int row, QStandardItem *item)
2649 Q_D(QStandardItemModel);
2652 if (rowCount() <= row)
2653 setRowCount(row + 1);
2655 QStandardItem *oldItem = d->rowHeaderItems.at(row);
2656 if (item == oldItem)
2660 if (item->model() ==
nullptr) {
2661 item->d_func()->setModel(
this);
2663 qWarning(
"QStandardItem::setVerticalHeaderItem: Ignoring duplicate insertion of item %p",
2670 oldItem->d_func()->setModel(
nullptr);
2673 d->rowHeaderItems.replace(row, item);
2674 emit headerDataChanged(Qt::Vertical, row, row);
2784QList<QStandardItem*> QStandardItemModel::findItems(
const QString &text,
2785 Qt::MatchFlags flags,
int column)
const
2787 QModelIndexList indexes = match(index(0, column, QModelIndex()),
2788 Qt::DisplayRole, text, -1, flags);
2789 QList<QStandardItem*> items;
2790 const int numIndexes = indexes.size();
2791 items.reserve(numIndexes);
2792 for (
int i = 0; i < numIndexes; ++i)
2793 items.append(itemFromIndex(indexes.at(i)));
3050QVariant QStandardItemModel::headerData(
int section, Qt::Orientation orientation,
int role)
const
3052 Q_D(
const QStandardItemModel);
3054 || ((orientation == Qt::Horizontal) && (section >= columnCount()))
3055 || ((orientation == Qt::Vertical) && (section >= rowCount()))) {
3058 QStandardItem *headerItem =
nullptr;
3059 if (orientation == Qt::Horizontal)
3060 headerItem = d->columnHeaderItems.at(section);
3061 else if (orientation == Qt::Vertical)
3062 headerItem = d->rowHeaderItems.at(section);
3063 return headerItem ? headerItem->data(role)
3064 : QAbstractItemModel::headerData(section, orientation, role);
3210bool QStandardItemModel::setHeaderData(
int section, Qt::Orientation orientation,
const QVariant &value,
int role)
3212 Q_D(QStandardItemModel);
3214 || ((orientation == Qt::Horizontal) && (section >= columnCount()))
3215 || ((orientation == Qt::Vertical) && (section >= rowCount()))) {
3218 QStandardItem *headerItem =
nullptr;
3219 if (orientation == Qt::Horizontal) {
3220 headerItem = d->columnHeaderItems.at(section);
3221 if (headerItem ==
nullptr) {
3222 headerItem = d->createItem();
3223 headerItem->d_func()->setModel(
this);
3224 d->columnHeaderItems.replace(section, headerItem);
3226 }
else if (orientation == Qt::Vertical) {
3227 headerItem = d->rowHeaderItems.at(section);
3228 if (headerItem ==
nullptr) {
3229 headerItem = d->createItem();
3230 headerItem->d_func()->setModel(
this);
3231 d->rowHeaderItems.replace(section, headerItem);
3235 headerItem->setData(value, role);
3273QMimeData *QStandardItemModel::mimeData(
const QModelIndexList &indexes)
const
3275 std::unique_ptr<QMimeData> data(QAbstractItemModel::mimeData(indexes));
3279 const QString format = qStandardItemModelDataListMimeType();
3280 if (!mimeTypes().contains(format))
3281 return data.release();
3283 QDataStream stream(&encoded, QIODevice::WriteOnly);
3285 QSet<QStandardItem*> itemsSet;
3286 QStack<QStandardItem*> stack;
3287 itemsSet.reserve(indexes.size());
3288 stack.reserve(indexes.size());
3289 for (
int i = 0; i < indexes.size(); ++i) {
3290 if (QStandardItem *item = itemFromIndex(indexes.at(i))) {
3294 qWarning(
"QStandardItemModel::mimeData: No item associated with invalid index");
3301 QDuplicateTracker<QStandardItem *> seen;
3302 while (!stack.isEmpty()) {
3303 QStandardItem *itm = stack.pop();
3304 if (seen.hasSeen(itm))
3307 const QList<QStandardItem*> &childList = itm->d_func()->children;
3308 for (
int i = 0; i < childList.size(); ++i) {
3309 QStandardItem *chi = childList.at(i);
3311 itemsSet.remove(chi);
3318 stack.reserve(itemsSet.size());
3319 for (QStandardItem *item : std::as_const(itemsSet))
3323 while (!stack.isEmpty()) {
3324 QStandardItem *item = stack.pop();
3325 if (itemsSet.contains(item))
3326 stream << item->row() << item->column();
3328 stream << *item << item->columnCount() <<
int(item->d_ptr->children.size());
3329 stack += item->d_ptr->children;
3332 data->setData(format, encoded);
3333 return data.release();
3362bool QStandardItemModel::dropMimeData(
const QMimeData *data, Qt::DropAction action,
3363 int row,
int column,
const QModelIndex &parent)
3365 Q_D(QStandardItemModel);
3367 if (!data || !(action == Qt::CopyAction || action == Qt::MoveAction))
3370 const QString format = qStandardItemModelDataListMimeType();
3371 if (!data->hasFormat(format))
3372 return QAbstractItemModel::dropMimeData(data, action, row, column, parent);
3374 if (row > rowCount(parent))
3375 row = rowCount(parent);
3377 row = rowCount(parent);
3382 QByteArray encoded = data->data(format);
3383 QDataStream stream(&encoded, QIODevice::ReadOnly);
3392 QList<
int> rows, columns;
3393 QList<QStandardItem *> items;
3395 while (!stream.atEnd()) {
3397 QStandardItem *item = d->createItem();
3399 d->decodeDataRecursive(stream, item);
3405 left = qMin(c, left);
3406 bottom = qMax(r, bottom);
3407 right = qMax(c, right);
3412 int dragRowCount = 0;
3413 int dragColumnCount = right - left + 1;
3416 QList<
int> rowsToInsert(bottom + 1);
3417 for (
int i = 0; i < rows.size(); ++i)
3418 rowsToInsert[rows.at(i)] = 1;
3419 for (
int i = 0; i < rowsToInsert.size(); ++i) {
3420 if (rowsToInsert.at(i) == 1){
3421 rowsToInsert[i] = dragRowCount;
3425 for (
int i = 0; i < rows.size(); ++i)
3426 rows[i] = top + rowsToInsert.at(rows.at(i));
3428 QBitArray isWrittenTo(dragRowCount * dragColumnCount);
3431 int colCount = columnCount(parent);
3432 if (colCount < dragColumnCount + column) {
3433 insertColumns(colCount, dragColumnCount + column - colCount, parent);
3434 colCount = columnCount(parent);
3436 insertRows(row, dragRowCount, parent);
3439 column = qMax(0, column);
3441 QStandardItem *parentItem = itemFromIndex (parent);
3443 parentItem = invisibleRootItem();
3445 QList<QPersistentModelIndex> newIndexes(items.size());
3447 for (
int j = 0; j < items.size(); ++j) {
3448 int relativeRow = rows.at(j) - top;
3449 int relativeColumn = columns.at(j) - left;
3450 int destinationRow = relativeRow + row;
3451 int destinationColumn = relativeColumn + column;
3452 int flat = (relativeRow * dragColumnCount) + relativeColumn;
3454 if (destinationColumn >= colCount || isWrittenTo.testBit(flat)) {
3455 destinationColumn = qBound(column, destinationColumn, colCount - 1);
3456 destinationRow = row + dragRowCount;
3457 insertRows(row + dragRowCount, 1, parent);
3458 flat = (dragRowCount * dragColumnCount) + relativeColumn;
3459 isWrittenTo.resize(++dragRowCount * dragColumnCount);
3461 if (!isWrittenTo.testBit(flat)) {
3462 newIndexes[j] = index(destinationRow, destinationColumn, parentItem->index());
3463 isWrittenTo.setBit(flat);
3467 for(
int k = 0; k < newIndexes.size(); k++) {
3468 if (newIndexes.at(k).isValid()) {
3469 parentItem->setChild(newIndexes.at(k).row(), newIndexes.at(k).column(), items.at(k));