嵌套QDockWidgets

时间:2009-03-04 00:13:34

标签: c++ qt qdockwidget

现在我的应用程序左侧有四个自定义QDockWidgets。当您启动应用程序时,每个应用程序都是可见的,但由于每个应用程序的可见性,因此非常小。

我想让QDockWidgets中的三个嵌套在一个主要的后面,以给予一个优先级和屏幕的整个左侧。

是否有人知道如何在QDockWidgets创建时将其嵌套?

5 个答案:

答案 0 :(得分:4)

这可以通过QMainWindow.tabifyDockWidget

来完成

http://doc.qt.io/archives/4.6/qmainwindow.html#tabifyDockWidget

这将自动创建标签,您可以根据需要选择每个停靠小部件。

答案 1 :(得分:1)

这可能是不可能的,因为QDockWidgets与QMainWindow高度集成 幕后发生的事情是QMainWidow有一个主要布局,其中包含所有QDocksWidgets,QToolbars和主要小部件。

可能的做法是以某种方式使一个QDockWidget替换其他QDockWidget或被它们覆盖。你需要深入研究QMainWindow代码,看看到底是怎么做的,并且可能继承QDockWidget,这是你通常不应该做的事情。

答案 2 :(得分:1)

如果您不想使用brianz'解决方案来标记您的QDockWidgets,只需使用removeDockWidget和addDockWidget互换即可设置可见的停靠窗口小部件。

e.g。 如果你有dock1和dock2:

明星:

g_Main->addDockWidget(Qt::LeftDockWidgetArea, dock1);

在某些菜单操作上:

void MainWnd::ShowDock2(){
    g_Main->removeDockWidget(dock1);
    g_Main->addDockWidget(Qt::LeftDockWidgetArea, dock2);
    dock2->show();
}

在另一个菜单上:

void MainWnd::ShowDock1(){
    g_Main->removeDockWidget(dock2);
    g_Main->addDockWidget(Qt::LeftDockWidgetArea, dock1);
    dock1->show();
}

如果您从QMainWindow派生并使用dock类的父类来自动发送信号(当一个被添加到Dock中以从中移除其他信息时),则可以简化

答案 3 :(得分:0)

不确定你到底发生了什么。也许你可以在dock小部件中使用类似QStackedWidget的东西,并使用拖放事件来创建新的QDockWidgets或将QDockWidget的内容移动到新的QStackedWidget中?

答案 4 :(得分:0)

尝试:

  

的QMainWindow :: setDockNestingEnabled(真);