现在我的应用程序左侧有四个自定义QDockWidgets
。当您启动应用程序时,每个应用程序都是可见的,但由于每个应用程序的可见性,因此非常小。
我想让QDockWidgets
中的三个嵌套在一个主要的后面,以给予一个优先级和屏幕的整个左侧。
是否有人知道如何在QDockWidgets
创建时将其嵌套?
答案 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(真);