forked from qt-creator/qt-creator
ScxmlEditor: Fix crash in WarningModel
Destroyed warnings were not properly removed, as qobject_cast on a QObject that's being destroyed returns nullptr. Also, call endRemoveRows() to finalize removing of rows, not endResetModel(), and avoid searching the vector twice. Change-Id: I70c0ac6ef897496adc71a5010929d71e91666ad4 Reviewed-by: Tim Jenssen <tim.jenssen@qt.io>
This commit is contained in:
@@ -237,14 +237,15 @@ Warning *WarningModel::getWarning(const QModelIndex &ind)
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
void WarningModel::warningDestroyed(QObject *ww)
|
||||
void WarningModel::warningDestroyed(QObject *w)
|
||||
{
|
||||
auto w = qobject_cast<Warning*>(ww);
|
||||
if (m_warnings.contains(w)) {
|
||||
int ind = m_warnings.indexOf(w);
|
||||
// Intentional static_cast.
|
||||
// The Warning is being destroyed, so qobject_cast doesn't work anymore.
|
||||
const int ind = m_warnings.indexOf(static_cast<Warning *>(w));
|
||||
if (ind >= 0) {
|
||||
beginRemoveRows(QModelIndex(), ind, ind);
|
||||
m_warnings.removeAt(ind);
|
||||
endResetModel();
|
||||
endRemoveRows();
|
||||
}
|
||||
|
||||
m_countChecker->start();
|
||||
|
Reference in New Issue
Block a user