Qt:QMdiSubWindow可以移到QMdiArea和QMainWindow之外吗?

Kla*_*aim 4 c++ qt

我正在编写某种编辑器,我想允许用户在MdiArea中自由移动窗口并允许它们将窗口移出MdiArea,从应用程序的主窗口移出.

我该怎么做才能做到这一点?

Kla*_*aim 6

我设法找到一个适用于Qt的简单解决方案.它并不完美,因为我没有实现drag'n'drop,但我想它也可以使用类似于Visual Studio 2010窗口对接的系统来完成.

这是设置:

  1. 使您的窗口小部件类成为窗口内容 - 文件窗口小部件 - 从QDockWidget或QMdiSubWindow继承其他内容.
  2. 现在,文档小部件需要拥有(创建,保留和销毁)一个QDockWidget,它将是外部窗口,以及一个QMdiSubWindow,它将是内部窗口.他们需要隐藏起来.
  3. 假设您的主窗口在其中心有一个QMdiArea,您将必须添加特殊代码以在QMdiArea中注册文档的内部窗口.
  4. 在某处(在窗口标题栏或文档小部件中)添加一个按钮,触发从内部窗口切换到外部窗口.
  5. 如果我们按下该按钮并且文档小部件位于内部窗口中,我们将隐藏内部窗口,然后从中取消注册文档小部件.然后我们在外部窗口中注册文档窗口并显示它.
  6. 要做到相反,只需切换外部和内部窗口即可.
  7. 您可能需要添加一些特殊代码来删除文档(意味着隐藏所有窗口,然后从QMdiArea取消注册内部窗口).

这样,只需按一下按钮,文档小部件就会从主窗口内的窗口跳到窗口外面而没有任何问题.


我正在一个开源项目中实现这个解决方案.一旦完成并公开,我将把链接放在这里.

编辑:我在那里我的WIP实现(检查相关的类):http://code.google.com/r/mjklaim-freewindows/source/browse/tools/aosdesigner/view/FreeWindowManager.hpp