我有两个 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 与位于同一个 dockWidgetArea 中的其他 QDockWidget 具有相同的布局。
这意味着如果这是之前的布局:
http://holmez.net/qdockwidget/1.png 之前的布局
这是切换之后:
切换 http://holmez.net/qdockwidget/2.png 后的布局
这就是我要的: