3

我有两个 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 后的布局

这就是我要的:

预期结果 http://holmez.net/qdockwidget/3.png

4

3 回答 3

2

我设法通过一个简单的技巧做到这一点,添加这行代码:

splitDockWidget(Dock1,Dock2,Qt::Horizontal);

在隐藏 Dock1 之前,这行:

splitDockWidget(Dock2,Dock1,Qt::Horizontal);

在隐藏 Dock2 之前。

这解决了停靠小部件的排列问题,不确定这是否是最好的方法,但它对我有用。

于 2013-09-19T11:21:16.107 回答
1

怎么用QTabWidget?2个小部件必须在同一个Qt::DockWidgetAreas

于 2013-10-11T19:19:01.950 回答
1

如果只使用 2 个 QDockWidgets,但在其中有QStackedWidgets可以用来交换视图呢?这就是我目前正在做的事情,而且效果很好。

另一个优点是交换视图非常简单:

    stackedWidget->setCurrentIndex(index);
于 2013-09-17T14:58:51.463 回答