fix: memory leak involving ExplorerModel
This commit is contained in:
parent
12a4ed76b4
commit
45f39c3f49
|
@ -83,9 +83,7 @@ MainWindow::MainWindow(QWidget *parent)
|
||||||
if (!path) return;
|
if (!path) return;
|
||||||
std::shared_ptr<DataModel> newModel = DataModel::LoadFromFile(path.value());
|
std::shared_ptr<DataModel> newModel = DataModel::LoadFromFile(path.value());
|
||||||
dataModel = newModel;
|
dataModel = newModel;
|
||||||
delete ui->explorerView->selectionModel();
|
ui->explorerView->updateRoot(newModel);
|
||||||
ui->explorerView->reset();
|
|
||||||
ui->explorerView->setModel(new ExplorerModel(dataModel));
|
|
||||||
});
|
});
|
||||||
|
|
||||||
connect(ui->actionDelete, &QAction::triggered, this, [&]() {
|
connect(ui->actionDelete, &QAction::triggered, this, [&]() {
|
||||||
|
|
|
@ -234,6 +234,12 @@ bool ExplorerModel::dropMimeData(const QMimeData *data, Qt::DropAction action, i
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void ExplorerModel::updateRoot(InstanceRef newRoot) {
|
||||||
|
beginResetModel();
|
||||||
|
rootItem = newRoot;
|
||||||
|
endResetModel();
|
||||||
|
}
|
||||||
|
|
||||||
QMimeData* ExplorerModel::mimeData(const QModelIndexList& indexes) const {
|
QMimeData* ExplorerModel::mimeData(const QModelIndexList& indexes) const {
|
||||||
// application/x-openblocks-instance-pointers
|
// application/x-openblocks-instance-pointers
|
||||||
DragDropSlot* slot = new DragDropSlot();
|
DragDropSlot* slot = new DragDropSlot();
|
||||||
|
|
|
@ -1,18 +1,12 @@
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include "objects/base/instance.h"
|
#include "objects/base/instance.h"
|
||||||
#include "objects/part.h"
|
|
||||||
#include "qabstractitemmodel.h"
|
#include "qabstractitemmodel.h"
|
||||||
#include "qevent.h"
|
#include "qevent.h"
|
||||||
#include "qmenu.h"
|
|
||||||
#include "qnamespace.h"
|
#include "qnamespace.h"
|
||||||
#include "qtreeview.h"
|
|
||||||
#include <QOpenGLWidget>
|
#include <QOpenGLWidget>
|
||||||
#include <QWidget>
|
#include <QWidget>
|
||||||
#include <memory>
|
|
||||||
|
|
||||||
// #ifndef EXPLORERMODEL_H
|
|
||||||
// #define EXPLORERMODEL_H
|
|
||||||
|
|
||||||
class ExplorerModel : public QAbstractItemModel {
|
class ExplorerModel : public QAbstractItemModel {
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
|
@ -42,6 +36,8 @@ public:
|
||||||
Qt::DropActions supportedDropActions() const override;
|
Qt::DropActions supportedDropActions() const override;
|
||||||
InstanceRef fromIndex(const QModelIndex index) const;
|
InstanceRef fromIndex(const QModelIndex index) const;
|
||||||
QModelIndex ObjectToIndex(InstanceRef item);
|
QModelIndex ObjectToIndex(InstanceRef item);
|
||||||
|
|
||||||
|
void updateRoot(InstanceRef newRoot);
|
||||||
private:
|
private:
|
||||||
InstanceRef rootItem;
|
InstanceRef rootItem;
|
||||||
QModelIndex toIndex(InstanceRef item);
|
QModelIndex toIndex(InstanceRef item);
|
||||||
|
|
|
@ -73,7 +73,6 @@ void ExplorerView::keyPressEvent(QKeyEvent* event) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void ExplorerView::buildContextMenu() {
|
void ExplorerView::buildContextMenu() {
|
||||||
contextMenu.addAction(M_mainWindow->ui->actionDelete);
|
contextMenu.addAction(M_mainWindow->ui->actionDelete);
|
||||||
contextMenu.addSeparator();
|
contextMenu.addSeparator();
|
||||||
|
@ -84,4 +83,8 @@ void ExplorerView::buildContextMenu() {
|
||||||
contextMenu.addSeparator();
|
contextMenu.addSeparator();
|
||||||
contextMenu.addAction(M_mainWindow->ui->actionSaveModel);
|
contextMenu.addAction(M_mainWindow->ui->actionSaveModel);
|
||||||
contextMenu.addAction(M_mainWindow->ui->actionInsertModel);
|
contextMenu.addAction(M_mainWindow->ui->actionInsertModel);
|
||||||
|
}
|
||||||
|
|
||||||
|
void ExplorerView::updateRoot(InstanceRef newRoot) {
|
||||||
|
model.updateRoot(newRoot);
|
||||||
}
|
}
|
|
@ -22,6 +22,7 @@ public:
|
||||||
// void dropEvent(QDropEvent*) override;
|
// void dropEvent(QDropEvent*) override;
|
||||||
|
|
||||||
void buildContextMenu();
|
void buildContextMenu();
|
||||||
|
void updateRoot(InstanceRef newRoot);
|
||||||
private:
|
private:
|
||||||
ExplorerModel model;
|
ExplorerModel model;
|
||||||
QMenu contextMenu;
|
QMenu contextMenu;
|
||||||
|
|
Loading…
Reference in a new issue