[gelöst] Fenster Handling : Maximieren etc.

Alles rund um die Programmierung mit Qt
Antworten
kowi1134
Beiträge: 120
Registriert: 1. Mai 2005 17:48
Wohnort: Arnsberg

[gelöst] Fenster Handling : Maximieren etc.

Beitrag 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
FlorianBecker
Beiträge: 1213
Registriert: 2. Dezember 2004 10:54
Kontaktdaten:

Beitrag 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.
kowi1134
Beiträge: 120
Registriert: 1. Mai 2005 17:48
Wohnort: Arnsberg

Beitrag 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
FlorianBecker
Beiträge: 1213
Registriert: 2. Dezember 2004 10:54
Kontaktdaten:

Beitrag 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.
kowi1134
Beiträge: 120
Registriert: 1. Mai 2005 17:48
Wohnort: Arnsberg

Beitrag 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 (Im Qt-Designer sah man dieses Abschneiden jedoch nicht.).

Könnten Spacer mit hierbei aus der Patsche helfen?

Konrad
FlorianBecker
Beiträge: 1213
Registriert: 2. Dezember 2004 10:54
Kontaktdaten:

Beitrag 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!?
kowi1134
Beiträge: 120
Registriert: 1. Mai 2005 17:48
Wohnort: Arnsberg

Beitrag 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?
Dateianhänge
So sieht es im Designer aus
So sieht es im Designer aus
1.jpg (60.48 KiB) 10459 mal betrachtet
So sieht es im Programm aus (die Buttons werden verdeckt)
So sieht es im Programm aus (die Buttons werden verdeckt)
2.jpg (48.3 KiB) 10459 mal betrachtet
FlorianBecker
Beiträge: 1213
Registriert: 2. Dezember 2004 10:54
Kontaktdaten:

Beitrag 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?
kowi1134
Beiträge: 120
Registriert: 1. Mai 2005 17:48
Wohnort: Arnsberg

Beitrag 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?
FlorianBecker
Beiträge: 1213
Registriert: 2. Dezember 2004 10:54
Kontaktdaten:

Beitrag von FlorianBecker »

Das meine ich:
Dateianhänge
vbox.png
vbox.png (4.8 KiB) 10450 mal betrachtet
kowi1134
Beiträge: 120
Registriert: 1. Mai 2005 17:48
Wohnort: Arnsberg

Beitrag 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
Dateianhänge
Im Progamm vergrößern sich die Widgets nicht mit
Im Progamm vergrößern sich die Widgets nicht mit
1.jpg (48.23 KiB) 10448 mal betrachtet
Ausführliche Qt-Designer-Ansicht
Ausführliche Qt-Designer-Ansicht
2.jpg (216.85 KiB) 10448 mal betrachtet
FlorianBecker
Beiträge: 1213
Registriert: 2. Dezember 2004 10:54
Kontaktdaten:

Beitrag von FlorianBecker »

Hauptfenster markieren und VBoxLayout!!! Was du gemacht hast ist alle items zu markieren und ein VBoxLayout daraus zu erstellen.
kowi1134
Beiträge: 120
Registriert: 1. Mai 2005 17:48
Wohnort: Arnsberg

Beitrag 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?
FlorianBecker
Beiträge: 1213
Registriert: 2. Dezember 2004 10:54
Kontaktdaten:

Beitrag von FlorianBecker »

kowi1134 hat geschrieben:War mein Beitrag zu den Signals/Slots in Ordnung?
Jo.
Antworten