Aufbau eines MainWindow mit Widgets

Alles rund um die Programmierung mit Qt
Antworten
curator
Beiträge: 26
Registriert: 15. April 2007 21:34

Aufbau eines MainWindow mit Widgets

Beitrag von curator »

Hallo.

Ich fürchte, ich habe ein Brett vor dem Kopf. Vielleicht kann mit jemand helfen. Es geht um folgendes Problem:

Ich habe eine MainWindow, das soll in 2 Widgets aufgeteilt werden, mit einem GridLayout (auch wenn das bei 1x2 übertriben ist).

Diese Widgets wiederum sind Abgeleitete Klassen von QWidget:

Code: Alles auswählen

class LeftWidget(*parent):QWidget(parent)
class RightWidget(*parent):QGLWidget(parent)
Das Linke Widget soll jetzt ein GridLayout bekomen, für Buttons etc, das Rechte soll plotten.

Damit es nicht heißt, ich hätte mich nicht damit beschäftigt, hier meine bisherigen Ergebnisse:

QMainWindow hat ein CentralWidget, dass will ich wohl splitten. Also

Schreibe ich in den Konstruktor des QMainWindow (bzw. der abgeleiteten Klasse MainWindow

Code: Alles auswählen

MainWindow::MainWindow(QWidget *parent):QMainWindow(parent)
{
     this->setCentralWidget(new QWidget(this));
     QGridLayout *l= new QGridLayout();
     
     LeftWidget *lw = new LeftWidget(this);
     RightWidget *rw = new RightWidget(this);

     l->addWidget(lw,0,0);
     l->addWidget(rw,0,1);
    
     centralWidget()->setLayout(l);
}

So, das RightWidget Plottet einfach nur, gekommt also kein Layout
Das Linke habe ich jetzt so gebaut.

Code: Alles auswählen

RightWidget::RightWidget(QWidget *parent):QWidget(parent)
{
     QGridLayout *l= new QGridLayout();
     
     QLabel *label = new QLabel("Hallo");
     QLineEdit *lineedit = new QLineEdit("Welt");


     l->addWidget(label,0,0);
     l->addWidget(lineedit,0,1);
    
     setLayout(l);
}
Fertig! Leider starte ich das Programm, ich bekomme nur in MainWindow, wo das LeftWidget offenbar das einzige ist. Ich sehe "Hallo Welt", aber das RightWidget ist nicht da.

Ich finde leider den Denkfehler nicht. Kann mir jemand auf die Sprünge helfen, oder eine Stück Code von sich zum anschauen geben, das diese Funktionalität (oder so ähnlich) realisiert?

Vielen Dank im voraus,
curator
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag von upsala »

Probiers mal so:

Code: Alles auswählen

MainWindow::MainWindow(QWidget *parent):QMainWindow(parent) 
{ 
  QWidget *wdg=new QWidget(this);
  setCentralWidget(wdg); 
  QGridLayout *l= new QGridLayout(); 
  wdg->setLayout(l);
       
  LeftWidget *lw = new LeftWidget(wdg); 
  RightWidget *rw = new RightWidget(wdg); 
 
  l->addWidget(lw,0,0); 
  l->addWidget(rw,0,1);     
}
curator
Beiträge: 26
Registriert: 15. April 2007 21:34

Beitrag von curator »

Hallo,

Hab das so übernommen, hilft aber nichts.

Stattdessen geht es, wenn ich in der LeftWidget die Zeile

setLayout(l);

weglasse.

Also das GridLayout nicht mit dem Widget verknüpfe. Das gibt aber doch keinen Sinn oder? Oder setzt der das Layout mit dem Befehl als Layout für das CentralWidget des MainWindow, weil genauso sieht es ja aus.

Vielen Dank für weitere Ideen,

curator
curator
Beiträge: 26
Registriert: 15. April 2007 21:34

Beitrag von curator »

Hallo nochmal, ich glaub ich hab das Problem rausgefunden.

Grundsätzlich setzt der das Layout richtig, wenn ich als Rechts statt dem QGLWidget was anderes mache geht es. Ich gehe daher davon aus, das Qt nicht im GridLayout mit dem GLWidget zusammenarbeiten kann, weil es ja quasi keine feste Größe hat. Habe ich zwei Buttons, teilt der in der Mitte, bei verschiedenen Elementen wohl woanders. Jetzt teilt der wohl so, dass das QGLWidget (Rechts) nur 10px breit ist.

Ich will jedoch eine Aufteilung Hälfte Hälfte.

Wie geht das ?

Gruß,
curator
FaS
Beiträge: 184
Registriert: 25. Mai 2006 19:48
Kontaktdaten:

Beitrag von FaS »

Die Größenberechnung erfolgt nach verschiedenen Regeln, die meisten kann man im Qt Designer steuern und sich direkt den Code davon ansehen, wenn man zufrieden ist. Gerade bei Layouts ist er eine ziemlich gute Hilfe.
In deinem Fall genügt wohl: column stretch.

PS: Ein QHBoxLayout ist bestimmt 1µs schneller als ein QGridLayout.

Gruß,
FaS
Antworten