Fix possible crash

The filter model needs to remove rows before the view tries to find
the next row to select. Otherwise the filtermodel might access the
source model at a position that is out of bounds.

Change-Id: Id610455f32e7c7fe921c243537def0097b46a798
Reviewed-by: Daniel Teske <daniel.teske@digia.com>
This commit is contained in:
Tobias Hunger
2012-10-05 14:32:40 +02:00
parent 996479e64f
commit 8d1e87c790
2 changed files with 4 additions and 4 deletions

View File

@@ -345,8 +345,8 @@ TaskFilterModel::TaskFilterModel(TaskModel *sourceModel, QObject *parent) : QAbs
Q_ASSERT(m_sourceModel); Q_ASSERT(m_sourceModel);
connect(m_sourceModel, SIGNAL(rowsInserted(QModelIndex,int,int)), connect(m_sourceModel, SIGNAL(rowsInserted(QModelIndex,int,int)),
this, SLOT(handleNewRows(QModelIndex,int,int))); this, SLOT(handleNewRows(QModelIndex,int,int)));
connect(m_sourceModel, SIGNAL(rowsRemoved(QModelIndex,int,int)), connect(m_sourceModel, SIGNAL(rowsAboutToBeRemoved(QModelIndex,int,int)),
this, SLOT(handleRemovedRows(QModelIndex,int,int))); this, SLOT(handleRowsAboutToBeRemoved(QModelIndex,int,int)));
connect(m_sourceModel, SIGNAL(modelReset()), connect(m_sourceModel, SIGNAL(modelReset()),
this, SLOT(handleReset())); this, SLOT(handleReset()));
connect(m_sourceModel, SIGNAL(dataChanged(QModelIndex,QModelIndex)), connect(m_sourceModel, SIGNAL(dataChanged(QModelIndex,QModelIndex)),
@@ -434,7 +434,7 @@ void TaskFilterModel::handleNewRows(const QModelIndex &index, int first, int las
endInsertRows(); endInsertRows();
} }
void TaskFilterModel::handleRemovedRows(const QModelIndex &index, int first, int last) void TaskFilterModel::handleRowsAboutToBeRemoved(const QModelIndex &index, int first, int last)
{ {
if (index.isValid()) if (index.isValid())
return; return;

View File

@@ -164,7 +164,7 @@ public:
QModelIndex mapFromSource(const QModelIndex &idx) const; QModelIndex mapFromSource(const QModelIndex &idx) const;
private slots: private slots:
void handleNewRows(const QModelIndex &index, int first, int last); void handleNewRows(const QModelIndex &index, int first, int last);
void handleRemovedRows(const QModelIndex &index, int first, int last); void handleRowsAboutToBeRemoved(const QModelIndex &index, int first, int last);
void handleDataChanged(QModelIndex,QModelIndex bottom); void handleDataChanged(QModelIndex,QModelIndex bottom);
void handleReset(); void handleReset();