2016-05-30 8 views
1

Ich habe eine Klasse, die von QMainWindow erbt. Im Konstruktor, habe ich die Central Widget zu NULL und dann mehrere QDockWidgets hinzufügen, um eine Benutzeroberfläche zu machen die consits von QDockWidgets nur:QDockWidgets in QMainWindow in mehreren Spalten anordnen

UserWidget::UserWidget(QWidget * parent) : QMainWindow(parent) 
{ 
    this->setCentralWidget(NULL); 
    // create Widgets for User communication e.g. PushButtons etc. 
    // ... 
    dockWidget_ = new QDockWidget; 
    dockWidget->setAllowedAreas(Qt::AllDockWidgetAreas); 
    dockWidget->setWidget(userWidget_); 
    this->addDockWidget(Qt::RightDockWidgetArea); 

Jetzt füge ich ein anderes QDockWidget aber statt Qt::RightDockWidgetArea, wähle ich Qt::LeftDockWidgetArea:

dockWidget_ = new QDockWidget; 
    dockWidget->setAllowedAreas(Qt::AllDockWidgetAreas); 
    dockWidget->setWidget(userWidget2_); 
    this->addDockWidget(Qt::LeftDockWidgetArea); 

bis hierher ist das Aussehen meines Programms ähnlich wie diese:

enter image description here

Proceeding weiter mit Hinzufügen einer weiteren QDockWidget:

dockWidget_ = new QDockWidget; 
    dockWidget->setAllowedAreas(Qt::AllDockWidgetAreas); 
    dockWidget->setWidget(userWidget3_); 
    this->addDockWidget(Qt::LeftDockWidgetArea /* or Qt::RightDockWidgetArea*/); 

ich mit einem Bereich in der Mitte gespaltet Ende:

enter image description here

Aber ich mag das Layout in drei Spalten aufgeteilt , ähnlich zu:

enter image description here

Allerdings habe ich keinen geeigneten Weg gefunden, dies zu tun. Das Einstellen des Bereichs auf Qt::TopDockWidgetArea oder Qt::BottomDockWidgetArea liefert weder das gewünschte Verhalten. Ich würde wirklich jede Hilfe hier schätzen.

Antwort

3

Sie müssen nur die Funktion verwenden splitDockWidget():

void QMainWindow::splitDockWidget(QDockWidget *first, QDockWidget *second, Qt::Orientation orientation) 

In Ihrem Fall können Sie einen setzen QDockWidget (nennen wir ihn dock1) auf der linken Seite und die beiden anderen auf der rechten Seite (dock2 und dock3) und die Funktion wie folgt aufrufen:

splitDockWidget(dock2, dock3, Qt::Horizontal);