forked from qt-creator/qt-creator
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 8b444f88eb
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>
This commit is contained in:
@@ -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);
|
||||
|
||||
@@ -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());
|
||||
|
||||
Reference in New Issue
Block a user