У меня есть два QDockWidget, только один из них виден в данный момент, я управляю этим с помощью toggleViewAction().
Что мне нужно сделать, так это то, что я хочу, чтобы два QDockWidget находились в одном месте, имели одинаковый размер и были закреплены в одной и той же области док-виджета с той же ориентацией и порядком относительно других QDockWidget.
Я сделал большую часть этого кода:
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();
}
}
этот код заставляет их иметь одинаковое местоположение и размер и пристыковывать к одной и той же области (слева, справа, ...), но это не гарантирует, что доки будут иметь одинаковую компоновку с другими QDockWidget в той же самойockWidgetArea.
Значение, если это был макет до:
http://holmez.net/qdockwidget/1.png
Это после переключения:
http://holmez.net/qdockwidget/2.png
Это то, что я хочу: