【问题标题】:Make two QDockWidgets mutual execlusive at the same position使两个QDockWidget在同一位置互斥
【发布时间】:2013-09-22 00:58:20
【问题描述】:

我有两个 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 具有相同的布局停靠小部件区域。

如果这是之前的布局的含义:

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

【问题讨论】:

  • 我希望它是:holmez.net/qdockwidget/3.png
  • 我为你内联了图片,并添加了来自你的 cmets 的图片。然而,这似乎是一个死链接。如果您将 3.png 上传到该服务器,它应该可以工作。
  • 我修复了第三张图片。谢谢蒂姆。

标签: qt qmainwindow qdockwidget


【解决方案1】:

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

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

    stackedWidget->setCurrentIndex(index);

【讨论】:

  • 我试过了,但是 QStackedWidget 既不能拖动也不能停靠,知道吗?
【解决方案2】:

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

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

在隐藏 Dock1 之前,以及这一行:

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

隐藏 Dock2 之前。

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

【讨论】:

    【解决方案3】:

    使用QTabWidget 怎么样? 这两个小部件必须在同一个Qt::DockWidgetAreas

    【讨论】:

    • 我试过了,但QTabWidget 的问题在于它的选项卡,我不想要这些选项卡,QStackedWidgets 的同样问题既不能移动也不能停靠。跨度>
    • 您可以在QDockWidget 中添加QTabWidget,这样您就可以移动和停靠它,您还可以使用自定义QTabBar 来更改标签的外观。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-09
    • 1970-01-01
    • 2017-01-03
    • 1970-01-01
    • 2013-04-20
    • 1970-01-01
    相关资源
    最近更新 更多