Seite 1 von 1
[gelöst] Fenster Handling : Maximieren etc.
Verfasst: 21. Mai 2005 13:10
von kowi1134
Hallo!
Ich habe ein Haupfenster vom Typ QDialog und darin eingebettet einen Widget-Stack vom Typ QWidgetStack.
Das Hauptfenster verfügt nur über die Buttons "?" und "X", es soll aber Buttons zur Maximierung und Minimierung des Fensters haben. Je nach Aktion, sollen dann auch der eingebette Widget-Stack und die darin enthaltenen Pages Ihre Größe anpassen.
Wie setzte ich die Fenster Knöpfe in der Fensterleiste?
Wie verknüpfe ich die richtigen Aktionen mit Ihnen, sofern das nicht automatisch geschieht?
Wie lasse ich die Widget Pages sich vergrößern/verkleinern?
Ciao
Konrad
Verfasst: 21. Mai 2005 13:19
von FlorianBecker
Der WinStyle ist abhängig vom benutzten WM unter X11 und unter Windows löst das Windows selbst. Du kannst in KDE beispielweise die Knöpfe der Titelleiste selber setzen.
Um dein Problem zu lösen nimmst du einfach einen QWidget mit WFlags Dialog, damit wird er modal, hat aber alle normalen Knöpfe eines Fensters.
Die Widget Pages innerhalb des Stacks werden normalerweise selbst vergrößert soweit diese nicht statisch sind.
Verfasst: 21. Mai 2005 13:31
von kowi1134
Soll das heißen, ich kann mein QDialog Hauptfenster so nicht weiter verwenden, sondern muss es in ein QWidget umwandeln und dann beim erzeugen als dritten Parameter ein Flag mit übergeben?
Mein Programm läuft unter Windows, aber deswegen macht Windows das mit den Knöpfen noch nicht alleine?
Kann Du mir vielleicht erklären, was statisch in Bezug auf die Widget pages heißt? Darunter kann ich mir nichts vorstellen.
Konrad
Verfasst: 21. Mai 2005 13:37
von FlorianBecker
kowi1134 hat geschrieben:Soll das heißen, ich kann mein QDialog Hauptfenster so nicht weiter verwenden, sondern muss es in ein QWidget umwandeln und dann beim erzeugen als dritten Parameter ein Flag mit übergeben?
Sicher kannst du es weiter verwenden, aber wenn die Knöpfe fehlen kannst du diese nicht hinzufügen. Du könntest sonst nur versuchen, dem Dialog Flags zu übergeben, das dann evtl. die Knöpfe da sind, aber so direkt sagen "Mache Knopf dahin" wird nicht gehen.
kowi1134 hat geschrieben:Mein Programm läuft unter Windows, aber deswegen macht Windows das mit den Knöpfen noch nicht alleine?
Mh, ne anders herum, Windows setzt all deine Knöpfe alleine, das mit dem KDE war nur ein Beispiel, wo man durch die Konfiguration der WM eingreifen könnte.
kowi1134 hat geschrieben:Kann Du mir vielleicht erklären, was statisch in Bezug auf die Widget pages heißt? Darunter kann ich mir nichts vorstellen.
Wenn du keine Layouts benutzt ist eine Seite statisch.
Verfasst: 21. Mai 2005 13:44
von kowi1134
Aha!
Das klärt viele meiner Fragen, die ich sonst noch hatte, aber nicht unbedingt zu formulieren gewusst hätte.
Und zwar bin ich an Layouts schon so manches mal verzweifelt, denn alles, was ich beispielsweise in eine Grid-Layout gepackt habe wurde an irgendeiner Stelle abgeschnitten

m Qt-Designer sah man dieses Abschneiden jedoch nicht.).
Könnten Spacer mit hierbei aus der Patsche helfen?
Konrad
Verfasst: 21. Mai 2005 14:03
von FlorianBecker
Mh, ich verwendet GridLayout nicht, nur H + VBoxLayout, da ich mit dem Grid auch so einige Probleme hatte. Kommt darauf an, was du für eine Qt Version nimmst, manche Qt Versionen so 3.2.x oder 3.1.x haben im Designer viele Fehler gehabt, könnte also durchaus auch ein wirklicher Fehler sein.
Ein Spacer hilft dir sicherlich, aber was genau hast du denn für ein Problem damit? Poste doch mal ein Bild von dem Designer und dann von der App und evtl. ein drittes, wo du mit rot einzeichnest, was du gerne wo hättest!?
Verfasst: 21. Mai 2005 14:15
von kowi1134
Ich habe Qt 3.3.3 -> mein Designer sollte keine Fehler haben, richtig?
Das Bild 1.jpg enthält die Designer Ansicht. Das Widget ist vom Typ QWidget.
Eine Ansicht, wie es im Programm erscheint liefert das Bild 2.jpg.
Im Programm erzeuge ich eine abgeleitete Klasse (GuiSourceForm) des Widgets (GuiSourceFormBase) und rufe Sie dann mit dem folgenden Code auf:
Code: Alles auswählen
_guisourceform = new GuiSourceForm( this , 0, WType_Popup );
Das Widget ist also ein Popup!
Ich habe die LineEdits in ein Grid gepackt, die PushButtons horizontal ausgerichtet und dann das beides in ein vertikales Layout gepackt.
Ist das zu viel Verpackung?
Verfasst: 21. Mai 2005 14:28
von FlorianBecker
Dir fehlt das generelle Layout. Auf deutsch, dein Fenster wäre statisch, wenn du es vergrößern würdest.
QVBoxLayout für das HauptWidget fehlt.
Mh, wenn du die Flags für Popup weglässt, kommt dann kein Resize Button?
Verfasst: 21. Mai 2005 14:37
von kowi1134
Also ich habe jetzt kein Problem mehr mit den Min/Max Buttons.
Wenn ich mein Hauptfenster als QDialog Klasse belasse und dann mit den folgenden Paramtern aus meinem Hauptprogramm (main()) initialisiere, klappt alles wunderbar (Nur das Resize-Management läßt wie gesagt noch zu wünschen übrig):
Code: Alles auswählen
GuiMainDialog *guiMain = new GuiMainDialog(0, "guiMain", FALSE, Qt::WStyle_MinMax | Qt::WStyle_SysMenu);
Weil ich unter Windows arbeite, sagt mir die Dokumentaion, dass ich Qt::WStyle_MinMax mit Qt::WStyle_SysMenu kombinieren muss.
Jetzt zu den Layouts:
Im Designer gibt es meines Wissens keinen QVBoxLayout Knopf, nicht wahr? Meinst Du, dass ich einfach alles markiere und in dann unter dem Menu "Layout" "Layout Vertically" anklicke? Das gäbe dann nämlich "nur" ein QVBox Objekt. Meinst Du das so?
Verfasst: 21. Mai 2005 14:45
von FlorianBecker
Das meine ich:
Verfasst: 21. Mai 2005 15:01
von kowi1134
Ok, so funktioniert es zumindest, dass im Popup die Knöpfe nicht verdeckt werden.
Wie aber schaffe ich es, dass sich das Widget in der Höhe und Breite anpasst, wenn ich das Fenster manuell vergrößer/verkleinere (siehe Bild 1.jpg)?
Sorry, ich bin heute etwas schwer von Begriff.
Folgende Layouts sind verwendet worden (siehe Bild 2.jpg):
LineEdits : Grid
PushButtons: H-Layout
Text + LineEdits + PushButtons : V-Layout
Verfasst: 21. Mai 2005 15:14
von FlorianBecker
Hauptfenster markieren und VBoxLayout!!! Was du gemacht hast ist alle items zu markieren und ein VBoxLayout daraus zu erstellen.
Verfasst: 21. Mai 2005 15:18
von kowi1134
Jaaaaaaaaaaaaaaaaaa!
Danke! Danke! Danke!
Problem gelöst! Patient geheilt! Welt gerettet!
Danke Vielmals
Konrad
PS: War mein Beitrag zu den Signals/Slots in Ordnung?
Verfasst: 21. Mai 2005 15:49
von FlorianBecker
kowi1134 hat geschrieben:War mein Beitrag zu den Signals/Slots in Ordnung?
Jo.