我有一个从 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);
到目前为止,我的程序的外观类似于以下内容:
继续添加另一个
QDockWidget
: dockWidget_ = new QDockWidget;
dockWidget->setAllowedAreas(Qt::AllDockWidgetAreas);
dockWidget->setWidget(userWidget3_);
this->addDockWidget(Qt::LeftDockWidgetArea /* or Qt::RightDockWidgetArea*/);
我最终得到了一个在中间分开的区域之一:
但是我想将布局分为3列,类似于:
但是,我没有找到任何合适的方法来执行此操作。将区域设置为
Qt::TopDockWidgetArea
或Qt::BottomDockWidgetArea
都不提供所需的行为。我非常感谢您的帮助。 最佳答案
您只需要使用splitDockWidget()函数:
void QMainWindow::splitDockWidget(QDockWidget *first, QDockWidget *second, Qt::Orientation orientation)
在您的情况下,您可以在左侧放置一个
QDockWidget
(我们称其为dock1
),在右侧放置另外两个(dock2
和dock3
),然后调用此函数:splitDockWidget(dock2, dock3, Qt::Horizontal);