qsortfilterproxymodel.cpp
来自「QT 开发环境里面一个很重要的文件」· C++ 代码 · 共 1,765 行 · 第 1/5 页
CPP
1,765 行
return false; QSortFilterProxyModelPrivate::Mapping *m = d->create_mapping(source_parent).value(); return m->source_rows.count() != 0 && m->source_columns.count() != 0;}/*! \reimp*/QVariant QSortFilterProxyModel::data(const QModelIndex &index, int role) const{ Q_D(const QSortFilterProxyModel); QModelIndex source_index = d->proxy_to_source(index); return d->model->data(source_index, role);}/*! \reimp*/bool QSortFilterProxyModel::setData(const QModelIndex &index, const QVariant &value, int role){ Q_D(QSortFilterProxyModel); QModelIndex source_index = d->proxy_to_source(index); return d->model->setData(source_index, value, role);}/*! \reimp*/QVariant QSortFilterProxyModel::headerData(int section, Qt::Orientation orientation, int role) const{ Q_D(const QSortFilterProxyModel); IndexMap::const_iterator it = d->create_mapping(QModelIndex()); int source_section; if (orientation == Qt::Vertical) { if (section < 0 || section >= it.value()->source_rows.count()) return QVariant(); source_section = it.value()->source_rows.at(section); } else { if (section < 0 || section >= it.value()->source_columns.count()) return QVariant(); source_section = it.value()->source_columns.at(section); } return d->model->headerData(source_section, orientation, role);}/*! \reimp*/bool QSortFilterProxyModel::setHeaderData(int section, Qt::Orientation orientation, const QVariant &value, int role){ Q_D(QSortFilterProxyModel); IndexMap::const_iterator it = d->create_mapping(QModelIndex()); int source_section; if (orientation == Qt::Vertical) { if (section < 0 || section >= it.value()->source_rows.count()) return false; source_section = it.value()->source_rows.at(section); } else { if (section < 0 || section >= it.value()->source_columns.count()) return false; source_section = it.value()->source_columns.at(section); } return d->model->setHeaderData(source_section, orientation, value, role);}/*! \reimp*/QMimeData *QSortFilterProxyModel::mimeData(const QModelIndexList &indexes) const{ Q_D(const QSortFilterProxyModel); QModelIndexList source_indexes; for (int i = 0; i < indexes.count(); ++i) source_indexes << d->proxy_to_source(indexes.at(i)); return d->model->mimeData(source_indexes);}/*! \reimp*/QStringList QSortFilterProxyModel::mimeTypes() const{ Q_D(const QSortFilterProxyModel); return d->model->mimeTypes();}/*! \reimp*/Qt::DropActions QSortFilterProxyModel::supportedDropActions() const{ Q_D(const QSortFilterProxyModel); return d->model->supportedDropActions();}/*! \reimp*/bool QSortFilterProxyModel::dropMimeData(const QMimeData *data, Qt::DropAction action, int row, int column, const QModelIndex &parent){ Q_D(QSortFilterProxyModel); if ((row == -1) && (column == -1)) return d->model->dropMimeData(data, action, -1, -1, d->proxy_to_source(parent)); QModelIndex proxy_index = index(row, column, parent); QModelIndex source_index = d->proxy_to_source(proxy_index); return d->model->dropMimeData(data, action, source_index.row(), source_index.column(), source_index.parent());}/*! \reimp*/bool QSortFilterProxyModel::insertRows(int row, int count, const QModelIndex &parent){ Q_D(QSortFilterProxyModel); if (row < 0 || count <= 0) return false; QModelIndex source_parent = d->proxy_to_source(parent); QSortFilterProxyModelPrivate::Mapping *m = d->create_mapping(source_parent).value(); if (row > m->source_rows.count()) return false; int source_row = (row >= m->source_rows.count() ? m->source_rows.count() : m->source_rows.at(row)); return d->model->insertRows(source_row, count, source_parent);}/*! \reimp*/bool QSortFilterProxyModel::insertColumns(int column, int count, const QModelIndex &parent){ Q_D(QSortFilterProxyModel); if (column < 0|| count <= 0) return false; QModelIndex source_parent = d->proxy_to_source(parent); QSortFilterProxyModelPrivate::Mapping *m = d->create_mapping(source_parent).value(); if (column > m->source_columns.count()) return false; int source_column = (column >= m->source_columns.count() ? m->source_columns.count() : m->source_columns.at(column)); return d->model->insertColumns(source_column, count, source_parent);}/*! \reimp*/bool QSortFilterProxyModel::removeRows(int row, int count, const QModelIndex &parent){ Q_D(QSortFilterProxyModel); if (row < 0 || count <= 0) return false; QModelIndex source_parent = d->proxy_to_source(parent); QSortFilterProxyModelPrivate::Mapping *m = d->create_mapping(source_parent).value(); if (row + count > m->source_rows.count()) return false; if ((count == 1) || ((d->sort_column < 0) && (m->proxy_rows.count() == m->source_rows.count()))) { int source_row = m->source_rows.at(row); return d->model->removeRows(source_row, count, source_parent); } // remove corresponding source intervals // ### if this proves to be slow, we can switch to single-row removal QVector<int> rows; for (int i = row; i < row + count; ++i) rows.append(m->source_rows.at(i)); qSort(rows.begin(), rows.end()); int pos = rows.count() - 1; bool ok = true; while (pos >= 0) { const int source_end = rows.at(pos--); int source_start = source_end; while ((pos >= 0) && (rows.at(pos) == (source_start - 1))) { --source_start; --pos; } ok = ok && d->model->removeRows(source_start, source_end - source_start + 1, source_parent); } return ok;}/*! \reimp*/bool QSortFilterProxyModel::removeColumns(int column, int count, const QModelIndex &parent){ Q_D(QSortFilterProxyModel); if (column < 0 || count <= 0) return false; QModelIndex source_parent = d->proxy_to_source(parent); QSortFilterProxyModelPrivate::Mapping *m = d->create_mapping(source_parent).value(); if (column + count > m->source_columns.count()) return false; if ((count == 1) || (m->proxy_columns.count() == m->source_columns.count())) { int source_column = m->source_columns.at(column); return d->model->removeColumns(source_column, count, source_parent); } // remove corresponding source intervals QVector<int> columns; for (int i = column; i < column + count; ++i) columns.append(m->source_columns.at(i)); int pos = columns.count() - 1; bool ok = true; while (pos >= 0) { const int source_end = columns.at(pos--); int source_start = source_end; while ((pos >= 0) && (columns.at(pos) == (source_start - 1))) { --source_start; --pos; } ok = ok && d->model->removeColumns(source_start, source_end - source_start + 1, source_parent); } return ok;}/*! \reimp*/void QSortFilterProxyModel::fetchMore(const QModelIndex &parent){ Q_D(QSortFilterProxyModel); QModelIndex source_parent; if (d->indexValid(parent)) source_parent = d->proxy_to_source(parent); d->model->fetchMore(source_parent);}/*! \reimp*/bool QSortFilterProxyModel::canFetchMore(const QModelIndex &parent) const{ Q_D(const QSortFilterProxyModel); QModelIndex source_parent; if (d->indexValid(parent)) source_parent = d->proxy_to_source(parent); return d->model->canFetchMore(source_parent);}/*! \reimp*/Qt::ItemFlags QSortFilterProxyModel::flags(const QModelIndex &index) const{ Q_D(const QSortFilterProxyModel); QModelIndex source_index; if (d->indexValid(index)) source_index = d->proxy_to_source(index); return d->model->flags(source_index);}/*! \reimp*/QModelIndex QSortFilterProxyModel::buddy(const QModelIndex &index) const{ Q_D(const QSortFilterProxyModel); if (!d->indexValid(index)) return QModelIndex(); QModelIndex source_index = d->proxy_to_source(index); QModelIndex source_buddy = d->model->buddy(source_index); if (source_index == source_buddy) return index; return d->source_to_proxy(source_buddy);}/*! \reimp*/QModelIndexList QSortFilterProxyModel::match(const QModelIndex &start, int role, const QVariant &value, int hits, Qt::MatchFlags flags) const{ return QAbstractProxyModel::match(start, role, value, hits, flags);}/*! \reimp*/QSize QSortFilterProxyModel::span(const QModelIndex &index) const{ Q_D(const QSortFilterProxyModel); QModelIndex source_index = d->proxy_to_source(index); return d->model->span(source_index);}/*! \reimp*/void QSortFilterProxyModel::sort(int column, Qt::SortOrder order){ Q_D(QSortFilterProxyModel); if (d->sort_column == column && d->sort_order == order) return; d->sort_column = column; d->sort_order = order; d->sort();}/*! \property QSortFilterProxyModel::filterRegExp \brief the QRegExp used to filter the contents of the source model Setting this property overwrites the current \l filterCaseSensitivity. By default, the QRegExp is an empty string matching all contents. \sa filterCaseSensitivity, setFilterWildcard(), setFilterFixedString()*/QRegExp QSortFilterProxyModel::filterRegExp() const{ Q_D(const QSortFilterProxyModel); return d->filter_regexp;}void QSortFilterProxyModel::setFilterRegExp(const QRegExp ®Exp){ Q_D(QSortFilterProxyModel); d->filter_regexp = regExp; d->filter_changed();}/*! \property QSortFilterProxyModel::filterKeyColumn \brief the column where the key used to filter the contents of the source model is read from. The default value is 0. If the value is -1, the keys will be read from all columns.*/int QSortFilterProxyModel::filterKeyColumn() const{ Q_D(const QSortFilterProxyModel); return d->filter_column;}void QSortFilterProxyModel::setFilterKeyColumn(int column){ Q_D(QSortFilterProxyModel);
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?