现在QDockWidgets
,我的应用程序左侧有四个自定义项。当您启动应用程序时,每一个都是可见的,但由于每一个都是可见的,所以非常小。
我希望其中三个QDockWidgets
嵌套在一个主要的后面,以赋予该一个优先级和屏幕的整个左侧。
有谁知道QDockWidgets
在创建它们时如何告诉嵌套?
现在QDockWidgets
,我的应用程序左侧有四个自定义项。当您启动应用程序时,每一个都是可见的,但由于每一个都是可见的,所以非常小。
我希望其中三个QDockWidgets
嵌套在一个主要的后面,以赋予该一个优先级和屏幕的整个左侧。
有谁知道QDockWidgets
在创建它们时如何告诉嵌套?
这可以通过以下方式完成QMainWindow.tabifyDockWidget
:
http://doc.qt.io/archives/4.6/qmainwindow.html#tabifyDockWidget
这将自动创建选项卡,您可以根据需要选择每个停靠小部件。
如果您不想使用 brianz 的解决方案来标记您的 QDockWidgets,只需交替使用 removeDockWidget 和 addDockWidget 来设置可见的停靠小部件。
例如,如果您有 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 派生并通过使用停靠小部件的父类来在一个被添加到停靠时自动发送信号以从中删除其他小部件,则可以简化
这可能是不可能的,因为 QDockWidgets 与 QMainWindow 高度集成。
幕后发生的事情是 QMainWidow 有一个主布局,其中包含所有 QDocksWidgets、QToolbars 和主小部件。
有可能以某种方式使一个 QDockWidget 替换其他 QDockWidget 或被绘制在它们之上。您需要深入研究 QMainWindow 代码以确切了解如何执行此操作,并且可能从 QDockWidget 继承,这是您通常不应该做的事情。
不确定你到底在追求什么。也许您可以在停靠小部件中使用 QStackedWidget 之类的东西,并使用拖放事件来创建新的 QDockWidget 或将 QDockWidget 的内容移动到新的 QStackedWidget 中?
尝试:
QMainWindow::setDockNestingEnabled(true);