我有两个QDockWidget,当时只能看到其中一个,我通过toggleViewAction()管理它。
我需要做的是我希望两个QDockWidget位于相同的位置,具有相同的大小并停靠在相同的dockWidgetArea,相对于其他QDockWidgets具有相同的方向和顺序。
我通过这段代码做了大部分工作:
void myMainWindow::slotToggleDocks(QAction* action) {
if(action == viewDock1) {
Dock1->setFloating(Dock2->isFloating());
Dock1->resize(Dock2->size());
Dock1->restoreGeometry(Dock2->saveGeometry());
Dock1->move(Dock2->pos());
addDockWidget(dockWidgetArea(Dock2), Dock1);
...
Dock2->hide();
} else if(action == viewDock2) {
Dock2->setFloating(Dock1->isFloating());
Dock2->resize(Dock1->size());
Dock2->restoreGeometry(Dock1->saveGeometry());
Dock2->move(Dock1->pos());
addDockWidget(dockWidgetArea(Dock2), Dock1);
...
Dock1->hide();
}
}
此代码使两者具有相同的位置和大小并停靠在同一区域(左,右,......)但不保证Docks将与其他QDockWidget具有相同的布局dockWidgetArea。
这意味着如果这是之前的布局:
Layout before http://holmez.net/qdockwidget/1.png
这是在切换之后:
Layout after toggling http://holmez.net/qdockwidget/2.png
这就是我想要的:
答案 0 :(得分:2)
我设法通过一个简单的技巧来做到这一点,添加这行代码:
splitDockWidget(Dock1,Dock2,Qt::Horizontal);
隐藏Dock1之前,这一行:
splitDockWidget(Dock2,Dock1,Qt::Horizontal);
隐藏Dock2之前。
这解决了停靠小部件排列的问题,不确定这是否是最佳方式,但它对我有用。
答案 1 :(得分:1)
如何只使用2个QDockWidgets,但可以使用QStackedWidgets INSIDE来交换视图?这就是我目前正在做的事情,而且效果很好。
另一个优点是交换视图非常简单:
stackedWidget->setCurrentIndex(index);
答案 2 :(得分:1)
使用QTabWidget
怎么样?
这两个小部件必须位于相同的Qt::DockWidgetAreas