Fix crash. Close a project with a selected linkable element (master, slave, report) cause a crash

git-svn-id: svn+ssh://svn.tuxfamily.org/svnroot/qet/qet/trunk@4992 bfdf4180-ca20-0410-9c96-a3a8aa849046
This commit is contained in:
blacksun
2017-07-20 12:40:30 +00:00
parent 9fdcf1a4ad
commit 4c56ebf353
3 changed files with 15 additions and 10 deletions

View File

@@ -52,7 +52,7 @@ void PropertiesEditorDockWidget::clear()
{ {
m_editor_list.removeOne(editor); m_editor_list.removeOne(editor);
ui->m_main_vlayout->removeWidget(editor); ui->m_main_vlayout->removeWidget(editor);
editor->deleteLater(); delete editor;
} }
m_editor_list.clear(); m_editor_list.clear();

View File

@@ -91,7 +91,10 @@ Diagram::Diagram(QETProject *project) :
* @brief Diagram::~Diagram * @brief Diagram::~Diagram
* Destructor * Destructor
*/ */
Diagram::~Diagram() { Diagram::~Diagram()
{
//First clear every selection to close an hypothetical editor
clearSelection();
// clear undo stack to prevent errors, because contains pointers to this diagram and is elements. // clear undo stack to prevent errors, because contains pointers to this diagram and is elements.
undoStack().clear(); undoStack().clear();
//delete of QGIManager, every elements he knows are removed //delete of QGIManager, every elements he knows are removed
@@ -103,11 +106,13 @@ Diagram::~Diagram() {
delete elements_mover_; delete elements_mover_;
delete element_texts_mover_; delete element_texts_mover_;
if (m_event_interface) delete m_event_interface; if (m_event_interface)
delete m_event_interface;
// list removable items // list removable items
QList<QGraphicsItem *> deletable_items; QList<QGraphicsItem *> deletable_items;
foreach(QGraphicsItem *qgi, items()) { for(QGraphicsItem *qgi : items())
{
if (qgi -> parentItem()) continue; if (qgi -> parentItem()) continue;
if (qgraphicsitem_cast<Conductor *>(qgi)) continue; if (qgraphicsitem_cast<Conductor *>(qgi)) continue;
deletable_items << qgi; deletable_items << qgi;

View File

@@ -56,7 +56,7 @@ void DiagramPropertiesEditorDockWidget::setDiagram(Diagram *diagram)
if (diagram) if (diagram)
{ {
m_diagram = diagram; m_diagram = diagram;
connect(m_diagram, SIGNAL(selectionChanged()), this, SLOT(selectionChanged()), Qt::QueuedConnection); connect(m_diagram, SIGNAL(selectionChanged()), this, SLOT(selectionChanged()));
connect(m_diagram, SIGNAL(destroyed()), this, SLOT(diagramWasDeleted())); connect(m_diagram, SIGNAL(destroyed()), this, SLOT(diagramWasDeleted()));
selectionChanged(); selectionChanged();
} }