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)
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>
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
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"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.txtNachweis:
run_tests.py sn_basis --baseline: GRÜN 318/318; QGIS-Test: offen, siehe obenEntscheidungen/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.mdneu 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 entferntwerden soll)
Checkliste
printchangelog.txtergänzt