在QMainWindow中安排多列中的QDockWidgets

时间:2016-05-30 08:54:23

标签: c++ qt user-interface layout qdockwidget

我有一个继承自QMainWindow的班级。在构造函数中,我将Central Widget设置为NULL,然后添加多个QDockWidgets以创建仅由QDockWidgets构成的用户界面:

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);

现在我添加了另一个QDockWidget而不是Qt::RightDockWidgetArea,我选择Qt::LeftDockWidgetArea

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

到目前为止,我的程序外观与此类似:

enter image description here

继续添加另一个QDockWidget

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

我最终得到了中间分裂的区域之一:

enter image description here

但我想将布局拆分为3列,类似于:

enter image description here

但是,我没有找到任何合适的方法来做到这一点。将区域设置为Qt::TopDockWidgetAreaQt::BottomDockWidgetArea都不会提供所需的行为。我真的很感激这里的任何帮助。

1 个答案:

答案 0 :(得分:3)

您只需使用splitDockWidget()函数:

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

在您的情况下,您可以在左侧放置一个QDockWidget(让他们称呼dock1),在右侧放置另外两个dock2和{{1 }}并调用这样的函数:

dock3