gpt4 book ai didi

qt - 让两个QDockWidget在同一个位置互斥

转载 作者:行者123 更新时间:2023-12-04 02:45:52 26 4
gpt4 key购买 nike

我有两个 QDockWidget,当时只有一个可见,我通过 toggleViewAction() 管理它。

我需要做的是,我希望两个 QDockWidget 位于相同的位置、相同的大小并停靠在相同的 dockWidgetArea 中,并且相对于其他 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();
}
}

此代码使两者具有相同的位置和大小并停靠到相同的区域(左,右,......)但它不保证 Docks 将与其他 QDockWidget 具有相同的布局dockWidgetArea.

意思是如果这是之前的布局:

Layout before http://holmez.net/qdockwidget/1.png

这是在切换之后:

Layout after toggling http://holmez.net/qdockwidget/2.png

这就是我想要的:

Expected result http://holmez.net/qdockwidget/3.png

最佳答案

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

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

在隐藏 Dock1 和这一行之前:

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

在隐藏 Dock2 之前。

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

关于qt - 让两个QDockWidget在同一个位置互斥,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18852371/

26 4 0