将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::TopDockWidgetArea
或 Qt::BottomDockWidgetArea
都无法提供所需的行为。我真的很感激这里的任何帮助。
你只需要使用函数 splitDockWidget() :
void QMainWindow::splitDockWidget(QDockWidget *first, QDockWidget *second, Qt::Orientation orientation)
在你的情况下,你可以将一个 QDockWidget
(我们称他为 dock1
)放在左边,另外两个放在右边(dock2
和 dock3
) 并像这样调用函数:
splitDockWidget(dock2, dock3, Qt::Horizontal);
我有一个 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::TopDockWidgetArea
或 Qt::BottomDockWidgetArea
都无法提供所需的行为。我真的很感激这里的任何帮助。
你只需要使用函数 splitDockWidget() :
void QMainWindow::splitDockWidget(QDockWidget *first, QDockWidget *second, Qt::Orientation orientation)
在你的情况下,你可以将一个 QDockWidget
(我们称他为 dock1
)放在左边,另外两个放在右边(dock2
和 dock3
) 并像这样调用函数:
splitDockWidget(dock2, dock3, Qt::Horizontal);