将QMainWindow中的QDockWidgets排列成多列

Arrange QDockWidgets in QMainWindow in multiple columns

我有一个 class 继承自 QMainWindow. In the constructor, I set the Central Widget to NULL and then add several 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::LeftDockWidgetArea 而不是 Qt::RightDockWidgetArea

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

到这里为止,我的程序的外观是这样的:

继续添加另一个 QDockWidget

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

我最终在中间分割了一个区域:

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

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

你只需要使用函数 splitDockWidget() :

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

在你的情况下,你可以将一个 QDockWidget(我们称他为 dock1)放在左边,另外两个放在右边(dock2dock3 ) 并像这样调用函数:

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