QMdiSubWindow可以移动到QMdiArea和QMainWindow之外吗?
Qt : Can a QMdiSubWindow be moved outside a QMdiArea and QMainWindow?
我正在编写某种编辑器,我想允许用户在MdiArea内自由移动窗口,并允许他们将窗口移出MdiArea,移出应用程序的主窗口。
我应该如何做到这一点?
我设法找到了一个简单的解决方案,与Qt工作。它不是完美的,因为我没有实现拖放,但我想它也可以做一个系统类似于Visual Studio 2010窗口停靠。
设置如下:
- 让你的窗口小部件类的内容-让我们称之为文档小部件-继承其他东西,而不是QDockWidget或QMdiSubWindow。
- 现在文档小部件需要拥有(创建,保留和销毁)一个QDockWidget,这将是外部窗口,和一个QMdiSubWindow,这将是内部窗口。它们都需要被隐藏。
- 假设你的主窗口在它的中心有一个QMdiArea,你必须添加特殊的代码来注册你的文档在QMdiArea的内部窗口。
- 在某个地方(在窗口标题栏或文档小部件中)添加一个按钮,触发从内部窗口切换到外部窗口。
- 如果我们按下那个按钮,文档小部件在内部窗口,我们隐藏内部窗口,然后注销文档小部件。然后我们将文档窗口注册到外部窗口并显示它。
- 相反,只需执行5,切换外部和内部窗口。
- 你可能需要添加一些特殊的代码来删除文档(意思是隐藏所有窗口,然后从QMdiArea注销内部窗口)。
这样,文档小部件将从主窗口内的窗口跳转到主窗口外的窗口,没有任何问题,只需按一个按钮。
我正在一个开源项目中实现这个解决方案。一旦完成并公开,我将把链接放在这里。
编辑:我已经但我的WIP FreeWindowManager.hpp
实现那里(检查相关类):https://code.google.com/archive/p/mjklaim-freewindows/source/default/source?page=2
首先,我想说这种行为应该避免,因为它会让用户感到困惑。实现这种行为还有其他方法。
工具栏)。我认为你需要考虑你的问题的逻辑——拖出窗口会导致你的窗口从主窗口"解除固定",因此你的mdi子窗口成为常规的顶层窗口。然后拖拽它应该会在某一点上造成夹紧。您应该定义何时应该发生这种解除固定和恢复固定-当mdi子节点到达mdi区域的边缘时?或者当光标离开mdi区域时仍在拖动?确切的答案将取决于这个问题的答案。
另一种方式,最有可能的是你需要创建QMdiSubWindow后代并重新实现QMdiSubWindow::moveEvent来检查是否执行了"unpinping"移动,如果是,在嵌入在QMdiSubWindow中的小部件上调用setParent(0)。然后你的小部件也应该重新实现moveEvent检查它是否应该被钉回去(如果它已经不是),并创建你的QMdiSubWindow后代的新实例(如果你delete
'd它在unpin),或使用setWidget上存储的QMdiSubWindow后代的副本(如果你没有delete
'd它在unpin)。
- QMainWindow 不会在条件块中打开
- 如何逐步更新QMainWindow
- 如何从另一个类编辑 QMainWindow UI 小部件?
- 类 QLayout 和类 QMainWindow Qt c++ 之间的继承
- 如何在Qt Designer UI文件中清除QMainWindow的几何标记
- 对 QMainWindow 使用 std::unique_ptr 时退出时出现 QT 应用程序分段错误
- 如何使用OpenGL渲染到一个QMainWindow的两个QWidget?
- qmdisubwindow的动态实施到qtabwidget中的qmdiarea
- QDialog 不会保留在父 QMainWindow 之上
- setWindowState from QMainWindow from QWidget
- 使用 QMainWindow 作为超类切换应用程序"states"
- 将 QMainWindow 中的 enterPressed() 连接到 Button clicked()
- QMainWindow 不是 .show() 但 .showFullScreen() 可以工作
- QMainWindow 类和 QDialogue 类之间的交互
- 如何从QMainWindow中的一组小部件上使用QPainter绘制特定的小部件
- 如何在QMainWindow的默认布局中排列项目?
- 保持自定义的QabtractiTemmodel为QMainWindow的寿命
- 是否可以制作一个未经装饰的“QMainWindow”
- 在析构函数之后打开新的QMainWindow崩溃
- QMdiSubWindow可以移动到QMdiArea和QMainWindow之外吗?