diff --git a/liteidex/src/utils/folderview/abstractmultiproxymodel.cpp b/liteidex/src/utils/folderview/abstractmultiproxymodel.cpp index e2e4841d..87da2ea6 100644 --- a/liteidex/src/utils/folderview/abstractmultiproxymodel.cpp +++ b/liteidex/src/utils/folderview/abstractmultiproxymodel.cpp @@ -65,7 +65,12 @@ AbstractMultiProxyModel::AbstractMultiProxyModel(AbstractMultiProxyModelPrivate */ AbstractMultiProxyModel::~AbstractMultiProxyModel() { - + Q_D(AbstractMultiProxyModel); + foreach (const SourceModelIndex &source, d->indexList) { + disconnect(source.model, 0, d, 0); + } + delete d_ptr; + d_ptr = 0; } /*! @@ -94,7 +99,7 @@ bool AbstractMultiProxyModel::removeSourceModel(QAbstractItemModel *sourceModel) SourceModelIndex index = i.next(); if (index.model == sourceModel) { this->beginRemoveRows(QModelIndex(),n,n); - disconnect(sourceModel,0,this,0); + disconnect(sourceModel,0,d,0); i.remove(); this->endRemoveRows(); return true; @@ -109,7 +114,7 @@ void AbstractMultiProxyModel::removeAllSourceModel() this->beginResetModel(); Q_D(AbstractMultiProxyModel); foreach (SourceModelIndex si, d->indexList) { - disconnect(si.model,0,this,0); + disconnect(si.model,0,d,0); } d->indexList.clear(); this->endResetModel(); diff --git a/liteidex/src/utils/folderview/multifoldermodel.cpp b/liteidex/src/utils/folderview/multifoldermodel.cpp index 65d03e33..471ddb18 100644 --- a/liteidex/src/utils/folderview/multifoldermodel.cpp +++ b/liteidex/src/utils/folderview/multifoldermodel.cpp @@ -136,7 +136,9 @@ MultiFolderModel::MultiFolderModel(QObject *parent) MultiFolderModel::~MultiFolderModel() { - + // Source models emit model signals during destruction. Remove and delete + // them while this proxy and its private signal receiver are still valid. + clearAll(); } QModelIndex MultiFolderModel::addRootPath(const QString &path) diff --git a/liteidex/src/utils/folderview/multifolderview.cpp b/liteidex/src/utils/folderview/multifolderview.cpp index a4d5d185..b4ab814b 100644 --- a/liteidex/src/utils/folderview/multifolderview.cpp +++ b/liteidex/src/utils/folderview/multifolderview.cpp @@ -58,6 +58,12 @@ MultiFolderView::MultiFolderView(LiteApi::IApplication *app, QWidget *parent) MultiFolderView::~MultiFolderView() { + // QTreeView owns persistent indexes for the current model. Reset them and + // destroy the model before QTreeView starts tearing down its private data. + m_model->clearAll(); + setModel(0); + delete m_model; + m_model = 0; } void MultiFolderView::setFilter(QDir::Filters filters)