From fee50a28d9734d9633b7dcd54ec8afa86f580321 Mon Sep 17 00:00:00 2001 From: Antti Soininen Date: Tue, 14 May 2024 13:10:19 +0300 Subject: [PATCH] Fix tearing down tree model on DB editor close This fixes a bug where the fetch parents of Alternative and Scenario models were not properly set as obsolete on DB editor close. The parents are set obsolete when the model is destroyed by Qt. However, the slot that the 'destroyed' signal connects to is not always called when an object is destroyed, see https://github.com/spine-tools/Spine-Toolbox/issues/2742 To get around the issue, we now connect the signal to a lambda function. Re #2742 --- spinetoolbox/mvcmodels/minimal_tree_model.py | 3 +-- spinetoolbox/spine_db_editor/mvcmodels/tree_model_base.py | 7 +++---- tests/spine_db_editor/mvcmodels/test_scenario_model.py | 2 +- 3 files changed, 5 insertions(+), 7 deletions(-) diff --git a/spinetoolbox/mvcmodels/minimal_tree_model.py b/spinetoolbox/mvcmodels/minimal_tree_model.py index 14b4aee41..57e598695 100644 --- a/spinetoolbox/mvcmodels/minimal_tree_model.py +++ b/spinetoolbox/mvcmodels/minimal_tree_model.py @@ -241,8 +241,7 @@ class MinimalTreeModel(QAbstractItemModel): """Base class for all tree models.""" def __init__(self, parent): - """Init class. - + """ Args: parent (SpineDBEditor) """ diff --git a/spinetoolbox/spine_db_editor/mvcmodels/tree_model_base.py b/spinetoolbox/spine_db_editor/mvcmodels/tree_model_base.py index 7b8f0da6b..a85a1a54d 100644 --- a/spinetoolbox/spine_db_editor/mvcmodels/tree_model_base.py +++ b/spinetoolbox/spine_db_editor/mvcmodels/tree_model_base.py @@ -11,7 +11,7 @@ ###################################################################################################################### """Models to represent things in a tree.""" -from PySide6.QtCore import QObject, Qt, QModelIndex, Slot +from PySide6.QtCore import Qt, QModelIndex from spinetoolbox.mvcmodels.minimal_tree_model import MinimalTreeModel from .tree_item_utility import StandardTreeItem @@ -30,7 +30,7 @@ def __init__(self, db_editor, db_mngr, *db_maps): self.db_editor = db_editor self.db_mngr = db_mngr self.db_maps = db_maps - self.destroyed.connect(self._tear_down_tree) + self.destroyed.connect(lambda _: self._tear_down_tree) def columnCount(self, parent=QModelIndex()): """Returns the number of columns under the given parent. Always 2. @@ -67,7 +67,6 @@ def db_item(item): def db_row(self, item): return self.db_item(item).child_number() - @Slot(QObject) - def _tear_down_tree(self, obj=None): + def _tear_down_tree(self): """Tears down tree items recursively""" self._invisible_root_item.tear_down_recursively() diff --git a/tests/spine_db_editor/mvcmodels/test_scenario_model.py b/tests/spine_db_editor/mvcmodels/test_scenario_model.py index 09208434c..af65925a2 100644 --- a/tests/spine_db_editor/mvcmodels/test_scenario_model.py +++ b/tests/spine_db_editor/mvcmodels/test_scenario_model.py @@ -36,7 +36,7 @@ def _fetch_recursively(model): for item in model.visit_all(): while item.can_fetch_more(): item.fetch_more() - qApp.processEvents() + QApplication.processEvents() class TestScenarioModel(_TestBase):