以编程方式取消标记三个QDockWidgets

时间:2017-08-09 12:57:12

标签: qt qt5 qdockwidget

我有一个带有三个停靠小部件的应用程序。这些是由以下代码创建的:

dock = new QDockWidget(tr("Some title"));
dock->setWidget(some_widget);
dock->setContextMenuPolicy(Qt::PreventContextMenu);
dock->setFeatures(QDockWidget::DockWidgetMovable | QDockWidget::DockWidgetFloatable);
addDockWidget(Qt::TopDockWidgetArea, dock);

dock2dock3然后按

列表
tabifyDockWidget(dock1, dock2);
tabifyDockWidget(dock2, dock3);

窗口看起来像这样: Tabbed docks

我可以通过拖放将它们并排排列,这样窗口看起来像这样: side-by-side docks

我想以编程方式执行此操作,但我无法弄清楚如何操作。做的时候

splitDockWidget(dock1, dock2, Qt::Horizontal);
没有任何反应。做的时候

splitDockWidget(dock1, dock2, Qt::Vertical);

dock1dock2消失,只有dock3仍然可见: dock1 and dock2 invisible

手动将其拖出主窗口并重新进入后,窗口如下所示: wrongly arranged docks

那我在这里做错了什么?

1 个答案:

答案 0 :(得分:0)

您需要创建右链splitDockWidget(),1> 2垂直,1> 3水平,2> 3水平,示例

 dock1 = new QDockWidget(tr("dock1"));
 dock2 = new QDockWidget(tr("dock2"));
 dock3 = new QDockWidget(tr("dock3"));

 dock1->setWidget(some_widget1);
 dock2->setWidget(some_widget2);
 dock3->setWidget(some_widget3);

 dock1->setContextMenuPolicy(Qt::PreventContextMenu);

 addDockWidget( Qt::LeftDockWidgetArea, dock1);
 addDockWidget( Qt::LeftDockWidgetArea, dock2);
 addDockWidget( Qt::RightDockWidgetArea, dock3);

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