From a3963d8bbcf7b4916c0e7c983cf32f95bf727e8c Mon Sep 17 00:00:00 2001 From: Mark Brand Date: Wed, 29 Aug 2012 10:14:08 +0200 Subject: [PATCH] QSqlQueryModel: suppress insert and remove signals while resetting There is no need to emit signals for inserting and removing rows and columns while resetting the model. Suppress these signals in such a way that subclasses can benefit without worrying about it. Change-Id: I04447c87173be54a7323b97608cdd40ae245b80b Reviewed-by: Andy Shaw Reviewed-by: Olivier Goffart --- src/sql/models/qsqlquerymodel.cpp | 78 +++++++++++++++++++++++++++++-- src/sql/models/qsqlquerymodel.h | 12 +++++ 2 files changed, 86 insertions(+), 4 deletions(-) diff --git a/src/sql/models/qsqlquerymodel.cpp b/src/sql/models/qsqlquerymodel.cpp index ea3bc7f20b..9d0447c981 100644 --- a/src/sql/models/qsqlquerymodel.cpp +++ b/src/sql/models/qsqlquerymodel.cpp @@ -78,11 +78,9 @@ void QSqlQueryModelPrivate::prefetch(int limit) atEnd = true; // this is the end. } if (newBottom.row() >= 0 && newBottom.row() > bottom.row()) { - if (!nestedResetLevel) - q->beginInsertRows(QModelIndex(), bottom.row() + 1, newBottom.row()); + q->beginInsertRows(QModelIndex(), bottom.row() + 1, newBottom.row()); bottom = newBottom; - if (!nestedResetLevel) - q->endInsertRows(); + q->endInsertRows(); } else { bottom = newBottom; } @@ -210,6 +208,78 @@ bool QSqlQueryModel::canFetchMore(const QModelIndex &parent) const return (!parent.isValid() && !d->atEnd); } +/*! \internal + */ +void QSqlQueryModel::beginInsertRows(const QModelIndex &parent, int first, int last) +{ + Q_D(QSqlQueryModel); + if (!d->nestedResetLevel) + QAbstractTableModel::beginInsertRows(parent, first, last); +} + +/*! \internal + */ +void QSqlQueryModel::endInsertRows() +{ + Q_D(QSqlQueryModel); + if (!d->nestedResetLevel) + QAbstractTableModel::endInsertRows(); +} + +/*! \internal + */ +void QSqlQueryModel::beginRemoveRows(const QModelIndex &parent, int first, int last) +{ + Q_D(QSqlQueryModel); + if (!d->nestedResetLevel) + QAbstractTableModel::beginRemoveRows(parent, first, last); +} + +/*! \internal + */ +void QSqlQueryModel::endRemoveRows() +{ + Q_D(QSqlQueryModel); + if (!d->nestedResetLevel) + QAbstractTableModel::endRemoveRows(); +} + +/*! \internal + */ +void QSqlQueryModel::beginInsertColumns(const QModelIndex &parent, int first, int last) +{ + Q_D(QSqlQueryModel); + if (!d->nestedResetLevel) + QAbstractTableModel::beginInsertColumns(parent, first, last); +} + +/*! \internal + */ +void QSqlQueryModel::endInsertColumns() +{ + Q_D(QSqlQueryModel); + if (!d->nestedResetLevel) + QAbstractTableModel::endInsertColumns(); +} + +/*! \internal + */ +void QSqlQueryModel::beginRemoveColumns(const QModelIndex &parent, int first, int last) +{ + Q_D(QSqlQueryModel); + if (!d->nestedResetLevel) + QAbstractTableModel::beginRemoveColumns(parent, first, last); +} + +/*! \internal + */ +void QSqlQueryModel::endRemoveColumns() +{ + Q_D(QSqlQueryModel); + if (!d->nestedResetLevel) + QAbstractTableModel::endRemoveColumns(); +} + /*! \internal */ void QSqlQueryModel::beginResetModel() diff --git a/src/sql/models/qsqlquerymodel.h b/src/sql/models/qsqlquerymodel.h index 89b72c8222..fd9ec53155 100644 --- a/src/sql/models/qsqlquerymodel.h +++ b/src/sql/models/qsqlquerymodel.h @@ -90,6 +90,18 @@ public: bool canFetchMore(const QModelIndex &parent = QModelIndex()) const; protected: + void beginInsertRows(const QModelIndex &parent, int first, int last); + void endInsertRows(); + + void beginRemoveRows(const QModelIndex &parent, int first, int last); + void endRemoveRows(); + + void beginInsertColumns(const QModelIndex &parent, int first, int last); + void endInsertColumns(); + + void beginRemoveColumns(const QModelIndex &parent, int first, int last); + void endRemoveColumns(); + void beginResetModel(); void endResetModel(); virtual void queryChange();