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 ea3bc7f..9d0447c 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; } @@ -212,6 +210,78 @@ bool QSqlQueryModel::canFetchMore(const QModelIndex &parent) const /*! \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() { Q_D(QSqlQueryModel); diff --git a/src/sql/models/qsqlquerymodel.h b/src/sql/models/qsqlquerymodel.h index 89b72c8..fd9ec53 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(); -- 2.7.4