Navigation.remove_all() räumt Toolbar/Menü beim Unload tatsächlich auf (#72) #73

Merged
Daniel merged 0 commits from bugfix/72-navigation-cleanup-deletelater into unstable 2026-09-21 08:38:05 +00:00
Member

Was

Navigation.remove_all() entfernte Toolbar/Menü beim Unload nur aus der sichtbaren Leiste, das Qt-Objekt
blieb bestehen – Plugin Reloader meldete "duplicated widget(s) not cleaned up". Issue: #72

Wie geprüft

  • python scripts/run_tests.py sn_basis --baseline: GRÜN 318/318 bestanden, unverändert gegenüber Baseline
  • QGIS-Test: noch offen – sn_basis mit Plugin Reloader mehrfach neu laden, Log-Konsole auf die
    "duplicated widget(s)"-Warnung prüfen, nach Möglichkeit unter QGIS 3.44 (Qt5) und QGIS 4 (Qt6)

Änderungen an Verträgen

keine

Übergabenotiz

Aufgabe: #72 – Navigation.remove_all() räumt Toolbar/Menü beim Unload tatsächlich auf
Stand: fertig (Code + Mock-Test), QGIS-Test steht noch aus
Geändert: ui/navigation.py (deleteLater in remove_all), functions/qt_wrapper.py
(deleteLater auf Mock-Menü/-Toolbar ergänzt), tests/test_navigation.py (Test angepasst + neuer Test),
changelog.txt
Nachweis: run_tests.py sn_basis --baseline: GRÜN 318/318; QGIS-Test: offen, siehe oben
Entscheidungen/Annahmen: deleteLater() ist in PyQt5/PyQt6 identisch, keine QGIS3/4-Fallunterscheidung
nötig (geprüft: kein QT_VERSION==5/6-Branching für Widget-Lebenszyklus im gesamten functions/-Ordner).
Der defensive Workaround in init_ui() bleibt bewusst stehen, ist jetzt aber überflüssig – optional in
einem Folge-PR entfernbar.
Offen / nächste Schritte: QGIS-Test (Plugin Reloader, beide Qt-Versionen wenn möglich);
docs/tests/testkatalog.md neu erzeugen, sobald #70 und #72 beide auf unstable sind.
Wissensbasis: nichts Neues (Fallstrick zu sqlite3/Windows kam bereits mit #70)
Kontext für die nächste Sitzung: ui/navigation.py (init_ui() defensiver Workaround, falls entfernt
werden soll)

Checkliste

  • Nur Änderungen zum Issue
  • Keine direkten Qt/QGIS-Importe, keine Debug-print
  • changelog.txt ergänzt
  • Wissensbasis nachgezogen (nichts Neues)
## Was Navigation.remove_all() entfernte Toolbar/Menü beim Unload nur aus der sichtbaren Leiste, das Qt-Objekt blieb bestehen – Plugin Reloader meldete "duplicated widget(s) not cleaned up". Issue: #72 ## Wie geprüft - `python scripts/run_tests.py sn_basis --baseline`: GRÜN 318/318 bestanden, unverändert gegenüber Baseline - QGIS-Test: noch offen – sn_basis mit Plugin Reloader mehrfach neu laden, Log-Konsole auf die "duplicated widget(s)"-Warnung prüfen, nach Möglichkeit unter QGIS 3.44 (Qt5) und QGIS 4 (Qt6) ## Änderungen an Verträgen keine ## Übergabenotiz **Aufgabe:** #72 – Navigation.remove_all() räumt Toolbar/Menü beim Unload tatsächlich auf **Stand:** fertig (Code + Mock-Test), QGIS-Test steht noch aus **Geändert:** `ui/navigation.py` (deleteLater in remove_all), `functions/qt_wrapper.py` (deleteLater auf Mock-Menü/-Toolbar ergänzt), `tests/test_navigation.py` (Test angepasst + neuer Test), `changelog.txt` **Nachweis:** `run_tests.py sn_basis --baseline`: GRÜN 318/318; QGIS-Test: offen, siehe oben **Entscheidungen/Annahmen:** deleteLater() ist in PyQt5/PyQt6 identisch, keine QGIS3/4-Fallunterscheidung nötig (geprüft: kein QT_VERSION==5/6-Branching für Widget-Lebenszyklus im gesamten functions/-Ordner). Der defensive Workaround in init_ui() bleibt bewusst stehen, ist jetzt aber überflüssig – optional in einem Folge-PR entfernbar. **Offen / nächste Schritte:** QGIS-Test (Plugin Reloader, beide Qt-Versionen wenn möglich); `docs/tests/testkatalog.md` neu erzeugen, sobald #70 und #72 beide auf unstable sind. **Wissensbasis:** nichts Neues (Fallstrick zu sqlite3/Windows kam bereits mit #70) **Kontext für die nächste Sitzung:** `ui/navigation.py` (init_ui() defensiver Workaround, falls entfernt werden soll) ## Checkliste - [x] Nur Änderungen zum Issue - [x] Keine direkten Qt/QGIS-Importe, keine Debug-`print` - [x] `changelog.txt` ergänzt - [x] Wissensbasis nachgezogen (nichts Neues)
Daniel added 1 commit 2026-09-21 08:29:29 +00:00
remove_toolbar()/remove_menu() nahmen Toolbar und Menü bisher nur aus der sichtbaren Leiste,
das Qt-Objekt blieb als Kind von main_window bestehen. Beim Neuladen mit dem Plugin Reloader
meldete QGIS deshalb "removing duplicated widget(s) not cleaned up by the plugin during
unload: LnoSachsenToolbar" - der defensive Workaround in init_ui() (Suche nach übrig
gebliebenen Toolbars) kaschierte das nur beim nächsten Laden, nicht beim Unload selbst.

remove_all() ruft jetzt deleteLater() auf beide Objekte, bevor die Referenzen verworfen
werden - dieselbe Behandlung, die init_ui() schon für Altlasten nutzt. deleteLater() ist in
PyQt5 und PyQt6 identisch, keine QGIS3/4-Fallunterscheidung nötig.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Daniel added 1 commit 2026-09-21 08:37:48 +00:00
Daniel merged commit f264178b63 into unstable 2026-09-21 08:38:05 +00:00
Daniel deleted branch bugfix/72-navigation-cleanup-deletelater 2026-09-21 08:38:05 +00:00
Sign in to join this conversation.
No Reviewers
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: AG_QGIS/Plugin_SN_Basis#73