summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/widgets/graphicsview/qgraphicsscene.cpp11
1 files changed, 8 insertions, 3 deletions
diff --git a/src/widgets/graphicsview/qgraphicsscene.cpp b/src/widgets/graphicsview/qgraphicsscene.cpp
index 411eee0c4f..f65082ad55 100644
--- a/src/widgets/graphicsview/qgraphicsscene.cpp
+++ b/src/widgets/graphicsview/qgraphicsscene.cpp
@@ -2251,11 +2251,16 @@ void QGraphicsScene::clearSelection()
++d->selectionChanging;
// iterate over a copy, as clearing selection might invalidate selectedItems
const auto selectedItems = d->selectedItems;
- bool changed = !selectedItems.isEmpty();
+ QSet<QGraphicsItem *> stillSelectedSet;
- for (QGraphicsItem *item : selectedItems)
+ for (QGraphicsItem *item : selectedItems) {
item->setSelected(false);
- d->selectedItems.clear();
+ // items might override itemChange to prevent deselection
+ if (item->isSelected())
+ stillSelectedSet << item;
+ }
+ const bool changed = stillSelectedSet != selectedItems;
+ d->selectedItems = stillSelectedSet;
// Re-enable emitting selectionChanged() for individual items.
--d->selectionChanging;