Designproblem...
-
Hi,
also es ist etwas umfangreicher.
Ich habe im Endeffekt ein FormLayout. Bisher hatte ich dort immer in Spalte 1 ein Label und in Spalte 2 ein eigenes Widget. Das eigene Widget wiederum hat das Standardlayout und eine ProgressBar sowie ein Label.
Das hat auch prima funktioniert!
Jetzt möchte ich aber in Spalte 2 des ersten FormLayouts gerne zwei gleich große Elemente meines eigenen Widgets (das ProgressBar sowie Label hat) einfügen. Zu diesem Zweck schalte ich ein Widget mit GridLayout dazwischen. In diesem GridLayout füge ich bei 0/0 ein eigenes Widget ein und bei 0/1 eine andere Instanz dieses eigenen Widgets.
Tue ich das jedoch, wird die Anzeigegrößer der zwei eigenen Widgets null. Das Widget, welches das GridLayout hält, hat jedoch die angemessene Größe (habe das durch gefärbten Background erfahren).
So und weitere Tests ergaben Folgendes: Wenn ich die FixedSize der beiden eigenen Widgets einfach Mal groß setze, dann werden sie angezeigt. Wenn ich über adjustSize() die Größe anpasse und nachher mit geometry() auslese, wird ebenfalls eine angemessene Größe angezeigt, aber auf dem Bildschirm sehe ich nichts?!
Hier nochmal die Struktur:
- QWidget mit FormLayout
-- je Spalte1: QLabel
-- je Spalte2: QWidget mit GridLayout
--- bei 0/0 Custom Widget ohne spezielles Layout <-- nicht angezeigt
---- QProgressBar
---- QLabel
--- bei 0/1 Custom Widget <-- ibid.
---- QProgressBar
---- QLabelJemand eine Idee?
PS:
Es funktioniert übrigens auch, wenn ich bei 0/1 z.B. ein QLabel einfüge und 0/0 unverändert lasse...
-
Okay, ich hab dem Custom Widget ein Horizontal Layout gegeben und jetzt geht es. Erzeuge ich UB, wenn ich einem Widget kein Layout gebe, aber Elemente hinzufüge?
-
Eisflamme schrieb:
Das eigene Widget wiederum hat das Standardlayout und eine ProgressBar sowie ein Label.
Da liegt mMn. das Problem - Ein Widget hat kein Standardlayout - standardmäßig nämlich gar keines! Wenn du ein childwidget auf ein anderes Widget platzierst, dann liegt das child auf dem parent, wird brav mitverschoben, events durchgereicht, mehr aber nicht. Standardmäßig liegen alle children auf (0,0).
Das Problem: Ohne layout oder angepasstem (sprich: implementiertem) sizeHint() gibt dieser eine invalide Größe zurück, das Widget ist somit bis zu 0 Breite und Höhe verkleinerbar.
Durch das Layout werden nicht nur die children angeordnet, es wird auch durch das Layout berechnet, wieviel Platz benötigt wird, um die darin liegenden children anzeigen zu können.Das beobachtete Verhalten ist also nicht undefiniert, sondern genau so gewollt
-
Oh Gott, das klingt gefährlich. Wichtige Lektion gelernt, danke.