summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJarek Kobus <jaroslaw.kobus@qt.io>2022-08-15 14:36:29 +0200
committerJarek Kobus <jaroslaw.kobus@qt.io>2022-08-22 08:03:43 +0000
commit5e6ad51e972bbc1fb937269be73f5555f64e2986 (patch)
treed52f951d72fae145e310c7ebdef65278644e2771
parentdc8e13995ab43fd1c05ec40ea876f5208869aa38 (diff)
downloadqt-creator-5e6ad51e972bbc1fb937269be73f5555f64e2986.tar.gz
ScxmlEditor: Fix a crash when closing scxml editor
Don't iterate on m_overlappedItems inside d'tor, as every iteration calls removeOverlappingItem() and it modifies the container being iterated. Do the same for m_outputTransitions and m_inputTransitions. Amends 8b444f88eb6cf37fcfbae8ae8d7388a43fcb78fb Fixes: QTCREATORBUG-28027 Change-Id: I78fe67b5ea584c969e4850a2db3f00d981296865 Reviewed-by: <github-actions-qt-creator@cristianadam.eu> Reviewed-by: Artem Sokolovskii <artem.sokolovskii@qt.io> Reviewed-by: Alessandro Portale <alessandro.portale@qt.io>
-rw-r--r--src/plugins/scxmleditor/plugin_interface/connectableitem.cpp12
-rw-r--r--src/plugins/scxmleditor/plugin_interface/scattributeitemdelegate.cpp2
2 files changed, 9 insertions, 5 deletions
diff --git a/src/plugins/scxmleditor/plugin_interface/connectableitem.cpp b/src/plugins/scxmleditor/plugin_interface/connectableitem.cpp
index 5132f19038..6fe6899fa3 100644
--- a/src/plugins/scxmleditor/plugin_interface/connectableitem.cpp
+++ b/src/plugins/scxmleditor/plugin_interface/connectableitem.cpp
@@ -64,15 +64,18 @@ ConnectableItem::~ConnectableItem()
{
setBlockUpdates(true);
- for (ConnectableItem *item : qAsConst(m_overlappedItems))
+ const QList<ConnectableItem *> overlappedItems = m_overlappedItems;
+ for (ConnectableItem *item : overlappedItems)
item->removeOverlappingItem(this);
m_overlappedItems.clear();
- for (TransitionItem *transition : qAsConst(m_outputTransitions))
+ const QList<TransitionItem *> outputTransitions = m_outputTransitions;
+ for (TransitionItem *transition : outputTransitions)
transition->disconnectItem(this);
m_outputTransitions.clear();
- for (TransitionItem *transition : qAsConst(m_inputTransitions))
+ const QList<TransitionItem *> inputTransitions = m_inputTransitions;
+ for (TransitionItem *transition : inputTransitions)
transition->disconnectItem(this);
m_inputTransitions.clear();
@@ -310,7 +313,8 @@ void ConnectableItem::updateTransitions(bool allChildren)
updateInputTransitions();
if (allChildren) {
- for (QGraphicsItem *it : childItems()) {
+ const QList<QGraphicsItem *> items = childItems();
+ for (QGraphicsItem *it : items) {
auto item = static_cast<ConnectableItem*>(it);
if (item && item->type() >= InitialStateType)
item->updateTransitions(allChildren);
diff --git a/src/plugins/scxmleditor/plugin_interface/scattributeitemdelegate.cpp b/src/plugins/scxmleditor/plugin_interface/scattributeitemdelegate.cpp
index bd90d3f846..365038a476 100644
--- a/src/plugins/scxmleditor/plugin_interface/scattributeitemdelegate.cpp
+++ b/src/plugins/scxmleditor/plugin_interface/scattributeitemdelegate.cpp
@@ -80,7 +80,7 @@ void SCAttributeItemDelegate::setEditorData(QWidget *editor, const QModelIndex &
combo->clear();
const QStringList values = index.data(DataRole).toString().split(";");
- for (QString val : values)
+ for (const QString &val : values)
combo->addItem(val);
combo->setCurrentText(index.data().toString());