Seitenleiste rollt, statt das QGIS-Fenster zu strecken

Daniel Helbig (LK Meissen) am 14.09.2026: ist die Seitenleiste hoeher als der Bildschirm,
schiebt sie den unteren Rand des QGIS-Fensters ins Unsichtbare. Grund: ein QDockWidget
reicht die Mindesthoehe seines Inhalts an das Hauptfenster weiter.

Der Inhalt haengt jetzt in einer QScrollArea (widgetResizable, kein Rahmen, waagerechter
Balken aus). Damit meldet das Dock nur noch 88 px Mindesthoehe statt 931; der Inhalt bleibt
ueber einen senkrechten Rollbalken erreichbar. Die Mindestbreite wandert auf die Rollflaeche
und bekommt die Balkenbreite aufgeschlagen (278 px), damit nichts angeschnitten wird. Die
Diensteliste gibt sich mit 90 statt 140 px zufrieden -- ihre Mindesthoehe zaehlt in die des
Docks hinein.

Geprueft mit tools/headless_panel_test.py (QGIS 4.2 offscreen, 0 Fehler): Rollflaeche da,
Dock verlangt 88 px bei 931 px Inhalt, Rollbalken wird gebraucht, kein waagerechter Balken.
Der Test laeuft neuerdings auch ohne VLN_TOKEN -- der Online-Teil wird dann uebersprungen,
die Layout-Pruefung nicht.

Closes #1

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
KAI
2026-09-21 08:21:21 +02:00
co-authored by Claude Opus 5
parent 3486d3a74e
commit 3a9075f635
2 changed files with 64 additions and 6 deletions
+31 -3
View File
@@ -15,6 +15,9 @@ Aufbau von oben nach unten:
5. Darstellung — Stil speichern (mit Häkchen „für alle Verfahren")
6. Statuszeile
Der Inhalt sitzt in einer Rollfläche: ist die Leiste höher als der Bildschirm, rollt sie,
statt das QGIS-Fenster zu strecken (Issue #1).
Der frühere GeoJSON-Weg (Kopie laden, später als Ganzes hochladen) ist am 08.09.2026
entfallen (Erik: „das Speichern via OGC einbauen, GeoJSON nicht mehr verwenden"). Über
die OGC API schreibt QGIS jede Änderung einzeln zurück; „Änderungen speichern" schließt
@@ -24,7 +27,7 @@ nur die offenen Bearbeitungssitzungen.
from qgis.PyQt.QtCore import Qt
from qgis.PyQt.QtWidgets import (QCheckBox, QComboBox, QDockWidget, QFrame, QGroupBox,
QHBoxLayout, QLabel, QLineEdit, QListWidget,
QListWidgetItem, QPushButton, QSizePolicy,
QListWidgetItem, QPushButton, QScrollArea, QSizePolicy,
QVBoxLayout, QWidget)
PANEL_TITEL = "VLN Karten"
@@ -72,7 +75,29 @@ class VlnPanel(QDockWidget):
aussen.addWidget(self._bau_status())
inhalt.setMinimumWidth(260)
self.setWidget(inhalt)
# Die Seitenleiste haengt in einer Rollflaeche, nicht direkt im Dock (Daniel Helbig,
# LK Meissen, 14.09.2026 — Issue #1 „UI-Ueberlauf"): ein QDockWidget gibt die
# Mindesthoehe seines Inhalts an das Hauptfenster weiter. Ist der Inhalt hoeher als
# der Bildschirm, waechst das QGIS-Fenster mit und sein unterer Rand rutscht ins
# Unsichtbare — samt Statusleiste. Die Rollflaeche kappt diese Weitergabe und blendet
# stattdessen einen senkrechten Rollbalken ein.
rolle = QScrollArea()
rolle.setWidget(inhalt)
rolle.setWidgetResizable(True) # Inhalt folgt der Breite des Docks
rolle.setFrameShape(QFrame.Shape.NoFrame)
rolle.setHorizontalScrollBarPolicy(Qt.ScrollBarPolicy.ScrollBarAlwaysOff)
rolle.setVerticalScrollBarPolicy(Qt.ScrollBarPolicy.ScrollBarAsNeeded)
# Ohne das bleibt die Mindesthoehe des Inhalts am Dock haengen und der Rollbalken
# aendert nichts an der gemeldeten Groesse. Uebrig bleibt die eigene Mindesthoehe der
# Rollflaeche (gemessen 88 px) — klein genug fuer jeden Bildschirm, gross genug,
# dass sich das Dock nicht auf einen Strich zusammenziehen laesst.
rolle.setMinimumHeight(0)
# Breite des Rollbalkens draufschlagen, sonst schneidet er die Auswahllisten an.
balken = rolle.verticalScrollBar().sizeHint().width() or 16
rolle.setMinimumWidth(260 + balken)
self.setWidget(rolle)
self.set_angemeldet(False)
# ------------------------------------------------------------------
@@ -157,7 +182,10 @@ class VlnPanel(QDockWidget):
lage.setSpacing(6)
lage.addWidget(_klein(QLabel("WMS-, WFS- und ArcGIS-Dienste für dieses Verfahren.")))
self.dienste_liste = QListWidget()
self.dienste_liste.setMinimumHeight(140)
# Bewusst niedrig: die Mindesthoehe aller Kaesten zusammen ist die Mindesthoehe des
# Docks (s. Rollflaeche im Konstruktor). 140 px hier machten die Seitenleiste auf
# einem 13-Zoll-Bildschirm hoeher als das Fenster.
self.dienste_liste.setMinimumHeight(90)
self.dienste_liste.setToolTip("Angehakte Dienste werden geladen")
lage.addWidget(self.dienste_liste)
zeile = QHBoxLayout()