Frage zu Qt-Designer: QMainWindow und QLayout

Alles rund um die Programmierung mit Qt
Antworten
baume
Beiträge: 9
Registriert: 23. Januar 2005 01:50
Wohnort: Stuttgart

Frage zu Qt-Designer: QMainWindow und QLayout

Beitrag von baume »

Hallo zusammen,

ich habe mal wieder ein Problem, an dem ich schon seit geraumer Zeit herumtüftle, und dessen Lösung wahrscheinlich so simpel ist, dass ich mich hinterher fragen werde, warum ich da nicht selbst drauf gekommen bin:

Ein (im Qt-Designer erzeugtes) QMainWindow besitzt nach meiner Recherche offenbar alle Komponenten, die ich für ein Layout der darin enthaltenen Komponenten benötige. Wie kann ich jedoch eine Größenänderung des Fensters in eine Größenänderung der enthaltenen Widgets (z.B. SoQtExaminerViewer) überführen?

Ich leite meine Klassen von den automatisch vom Designer erzeugten ui-files ab: class MainWindow : public MainWindowUI

Ich bin sehr dankbar für jede gute Idee, die mir auf die Sprünge hilft! Vielleicht gibt es ja ein geeignetes Online-Tutorial o.ä.

Schöne Grüße, Martin
FlorianBecker
Beiträge: 1213
Registriert: 2. Dezember 2004 10:54
Kontaktdaten:

Beitrag von FlorianBecker »

whaty?
arno
Beiträge: 7
Registriert: 16. Januar 2005 15:48
Wohnort: Stadtprozelten
Kontaktdaten:

Beitrag von arno »

vielleicht durch den Einbau geigneter Spacer und Layouts?

Tutorials sind in der Doku enthalten unter "Getting Started".
FlorianBecker
Beiträge: 1213
Registriert: 2. Dezember 2004 10:54
Kontaktdaten:

Beitrag von FlorianBecker »

Ah, vielleicht wird es logischer für mich.

Du willst die SoQtExaminerViewer Klasse als angezeigtes Widget haben...
hey, das ist einfach

setCentralWidget( SoQtExaminerViewer );

wenn deine Klasse von QMainWindow abgeleitet ist.

Sorry, aber ich habs erst beim vierten mal lesen ein wenig verstanden, was du willst.
baume
Beiträge: 9
Registriert: 23. Januar 2005 01:50
Wohnort: Stuttgart

Beitrag von baume »

Yupps, da ist mit mir wohl die Kürze ohne die Würze durchgegangen. Also nochmal der Reihe nach:

Ich erstelle im Designer ein QMainWindow und bestücke es mit QFrames, Buttons etc. Die Klasse nenne ich MainWindowUI und leite sie zwecks Trennung GUI/Funktionalität ab: MainWindow : public MainWindowUI (ich weiß, es gibt die 'ui.h'-files, für mich ist subclassing aber besser).

Wenn ich jetzt das MainWindow interaktiv in der Größe verändere, werden die enthaltenen Widgets nicht gestretcht bzw. gestaucht. Daher rührt meine Frage: Wie kann ich das Layout im MainWindow so anpassen, dass untergeordnete Widgets sich in Ihrem Stretch-Verhalten individuell anpassen lassen? Geht das evtl. sogar im Designer?

In einen QFrame des MainWindow füge ich dann einen MyViewer ( : public SoQtExaminerViewer) einzufügen, der von Haus aus offenbar sämtliche Skalierungsfunktionen für 3D-Modelle bei Veränderung seines mainWidgets intus hat, wohl jedoch nur, wenn er vom parent die benötigten Layout-Informationen übermittelt bekommt.

Ich hab's mal aufs Nötigste reduziert folgendermaßen im Konstruktor von MainWindow probiert:

Code: Alles auswählen

MainWindow::MainWindow( QWidget *parent, const char *name ) : MainWindowUI( parent, name ) {
...
  this->setCentralWidget( new QWidget( this, "central_widget" ) );
  this->viewer = new MyViewer( this->centralWidget(), "3D Viewer" );
  this->viewer->show();
...
}
... und schwuppps ... es geht!

Das funktioniert jetzt zwar wie gewünscht, jedoch ist nun das gesamte centralWidget mit dem viewer belegt. Mein Wunsch wäre es, ein QFrame im Designer anzulegen und dann den viewer (interaktiv skalierbar, d.h. mit layout) darin einzufügen, um den Rest des centralWidget noch für div. andere (skalierbare) Widgets übrig zu haben. Krieg ich das irgendwie hin?

Sodele, ich hoffe das war etwas klarer als mein Gebrabbel von vorhin.

Schönen Gruß,

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

Beitrag von FlorianBecker »

Fenster1 \
Fenster2 -> NeuesFenster -> setCentralWidget( NeuesFenster );
Fenster3 /

Siehe lustige Zeichnung.

Mach einfach ein WidgetX, das setCentralWidget wird und auf das WidgetX teilst du dein Layout ein, wie du es brauchst. Mit dem Designer ist es besser immer nur einzelne Widgets zu bauen und die dann später zusammenzusetzen. Große Widgets sind meistens nicht wirklich vorteilhaft.
baume
Beiträge: 9
Registriert: 23. Januar 2005 01:50
Wohnort: Stuttgart

Beitrag von baume »

Danke für den prima Tipp, ich werde mich mal daran orientieren.
Schönen Gruß,

Martin

P.S.: Die Zeichnung hat was (vielleicht häng' ich sie sogar mal irgendwo auf ... :D )
Antworten