我有一个从 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);

到目前为止,我的程序的外观类似于以下内容:

c++ - 在QMainWindow中将QDockWidgets排列为多列-LMLPHP

继续添加另一个QDockWidget:
    dockWidget_ = new QDockWidget;
    dockWidget->setAllowedAreas(Qt::AllDockWidgetAreas);
    dockWidget->setWidget(userWidget3_);
    this->addDockWidget(Qt::LeftDockWidgetArea /* or Qt::RightDockWidgetArea*/);

我最终得到了一个在中间分开的区域之一:

c++ - 在QMainWindow中将QDockWidgets排列为多列-LMLPHP

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

c++ - 在QMainWindow中将QDockWidgets排列为多列-LMLPHP

但是,我没有找到任何合适的方法来执行此操作。将区域设置为Qt::TopDockWidgetAreaQt::BottomDockWidgetArea都不提供所需的行为。我非常感谢您的帮助。

最佳答案

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

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

在您的情况下,您可以在左侧放置一个QDockWidget(我们称其为dock1),在右侧放置另外两个(dock2dock3),然后调用此函数:
splitDockWidget(dock2, dock3, Qt::Horizontal);

10-07 19:21
查看更多