364QMimeData *QConcatenateTablesProxyModel::mimeData(
const QModelIndexList &indexes)
const
366 Q_D(
const QConcatenateTablesProxyModel);
367 if (indexes.isEmpty())
369 const QModelIndex firstIndex = indexes.first();
370 Q_ASSERT(checkIndex(firstIndex, CheckIndexOption::IndexIsValid));
371 const auto result = d->sourceModelForRow(firstIndex.row());
372 QModelIndexList sourceIndexes;
373 sourceIndexes.reserve(indexes.size());
374 for (
const QModelIndex &index : indexes) {
375 const QModelIndex sourceIndex = mapToSource(index);
376 Q_ASSERT(sourceIndex.model() == result.sourceModel);
377 sourceIndexes.append(sourceIndex);
379 return result.sourceModel->mimeData(sourceIndexes);
492void QConcatenateTablesProxyModel::addSourceModel(QAbstractItemModel *sourceModel)
494 Q_D(QConcatenateTablesProxyModel);
495 Q_ASSERT(sourceModel);
496 Q_ASSERT(!d->containsSourceModel(sourceModel));
498 const int newRows = sourceModel->rowCount();
500 beginInsertRows(QModelIndex(), d->m_rowCount, d->m_rowCount + newRows - 1);
501 d->m_rowCount += newRows;
502 d->m_models.emplace_back(sourceModel,
503 QObjectPrivate::connect(sourceModel, &QAbstractItemModel::dataChanged,
504 d, &QConcatenateTablesProxyModelPrivate::slotDataChanged),
505 QObjectPrivate::connect(sourceModel, &QAbstractItemModel::rowsInserted,
506 d, &QConcatenateTablesProxyModelPrivate::slotRowsInserted),
507 QObjectPrivate::connect(sourceModel, &QAbstractItemModel::rowsRemoved,
508 d, &QConcatenateTablesProxyModelPrivate::slotRowsRemoved),
509 QObjectPrivate::connect(sourceModel, &QAbstractItemModel::rowsAboutToBeInserted,
510 d, &QConcatenateTablesProxyModelPrivate::slotRowsAboutToBeInserted),
511 QObjectPrivate::connect(sourceModel, &QAbstractItemModel::rowsAboutToBeRemoved,
512 d, &QConcatenateTablesProxyModelPrivate::slotRowsAboutToBeRemoved),
513 QObjectPrivate::connect(sourceModel, &QAbstractItemModel::rowsMoved,
514 d, &QConcatenateTablesProxyModelPrivate::slotRowsMoved),
515 QObjectPrivate::connect(sourceModel, &QAbstractItemModel::rowsAboutToBeMoved,
516 d, &QConcatenateTablesProxyModelPrivate::slotRowsAboutToBeMoved),
518 QObjectPrivate::connect(sourceModel, &QAbstractItemModel::columnsInserted,
519 d, &QConcatenateTablesProxyModelPrivate::slotColumnsInserted),
520 QObjectPrivate::connect(sourceModel, &QAbstractItemModel::columnsRemoved,
521 d, &QConcatenateTablesProxyModelPrivate::slotColumnsRemoved),
522 QObjectPrivate::connect(sourceModel, &QAbstractItemModel::columnsAboutToBeInserted,
523 d, &QConcatenateTablesProxyModelPrivate::slotColumnsAboutToBeInserted),
524 QObjectPrivate::connect(sourceModel, &QAbstractItemModel::columnsAboutToBeRemoved,
525 d, &QConcatenateTablesProxyModelPrivate::slotColumnsAboutToBeRemoved),
526 QObjectPrivate::connect(sourceModel, &QAbstractItemModel::columnsMoved,
527 d, &QConcatenateTablesProxyModelPrivate::slotColumnsMoved),
528 QObjectPrivate::connect(sourceModel, &QAbstractItemModel::columnsAboutToBeMoved,
529 d, &QConcatenateTablesProxyModelPrivate::slotColumnsAboutToBeMoved),
531 QObjectPrivate::connect(sourceModel, &QAbstractItemModel::layoutAboutToBeChanged,
532 d, &QConcatenateTablesProxyModelPrivate::slotSourceLayoutAboutToBeChanged),
533 QObjectPrivate::connect(sourceModel, &QAbstractItemModel::layoutChanged,
534 d, &QConcatenateTablesProxyModelPrivate::slotSourceLayoutChanged),
535 QObjectPrivate::connect(sourceModel, &QAbstractItemModel::modelAboutToBeReset,
536 d, &QConcatenateTablesProxyModelPrivate::slotModelAboutToBeReset),
537 QObjectPrivate::connect(sourceModel, &QAbstractItemModel::modelReset,
538 d, &QConcatenateTablesProxyModelPrivate::slotModelReset)
540 if (!d->m_roleNamesDirty) {
542 const auto newRoleNames = sourceModel->roleNames();
543 for (
const auto &[k, v] : newRoleNames.asKeyValueRange())
544 d->m_roleNames.insert_or_assign(k, v);
549 d->updateColumnCount();
773 const QList<QPersistentModelIndex> &sourceParents, QAbstractItemModel::LayoutChangeHint hint)
775 Q_Q(QConcatenateTablesProxyModel);
777 if (!sourceParents.isEmpty() && !sourceParents.contains(QModelIndex()))
780 emit q->layoutAboutToBeChanged({}, hint);
782 const QModelIndexList persistentIndexList = q->persistentIndexList();
783 layoutChangePersistentIndexes.reserve(persistentIndexList.size());
784 layoutChangeProxyIndexes.reserve(persistentIndexList.size());
786 for (
const QModelIndex &proxyPersistentIndex : persistentIndexList) {
787 layoutChangeProxyIndexes.append(proxyPersistentIndex);
788 Q_ASSERT(proxyPersistentIndex.isValid());
789 const QPersistentModelIndex srcPersistentIndex = q->mapToSource(proxyPersistentIndex);
790 Q_ASSERT(srcPersistentIndex.isValid());
791 layoutChangePersistentIndexes << srcPersistentIndex;