From edf6debbabe997dee9e636a831ccff73d184b6c1 Mon Sep 17 00:00:00 2001 From: Daniel Teske Date: Fri, 3 Nov 2017 13:24:18 +0100 Subject: [PATCH] QitemSelectionModel: Fix a bug in isColumnSelected Previously the code for isColumnSelected and isRowSelected differed slightly, in how unselectable indexes would be treated. This made isColumnSelected return false for a column, which mixed unselectable indexes and selected indexes. Thus in some situations, the user could not deselect a column via a QTableView header. By copying the isRowSelected code to isColumnSelected, rows and columns behave identical. Task-number: QTBUG-18001 Change-Id: I6ca85ac64b31a481fafeaa3bec958b18283eed8d Reviewed-by: Richard Moe Gustavsen --- src/corelib/itemmodels/qitemselectionmodel.cpp | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/corelib/itemmodels/qitemselectionmodel.cpp b/src/corelib/itemmodels/qitemselectionmodel.cpp index 9af4fd9133..ceec0e4c94 100644 --- a/src/corelib/itemmodels/qitemselectionmodel.cpp +++ b/src/corelib/itemmodels/qitemselectionmodel.cpp @@ -1577,8 +1577,12 @@ bool QItemSelectionModel::isColumnSelected(int column, const QModelIndex &parent for (int row = 0; row < rowCount; ++row) { for (it = joined.constBegin(); it != joined.constEnd(); ++it) { if ((*it).contains(row, column, parent)) { - Qt::ItemFlags flags = d->model->index(row, column, parent).flags(); - if ((flags & Qt::ItemIsSelectable) && (flags & Qt::ItemIsEnabled)) { + bool selectable = false; + for (int i = row; !selectable && i <= (*it).bottom(); ++i) { + Qt::ItemFlags flags = d->model->index(i, column, parent).flags(); + selectable = flags & Qt::ItemIsSelectable; + } + if (selectable){ row = qMax(row, (*it).bottom()); break; }