如何将可拆卸区域(QDockWidget)添加到QML应用程序

App*_*ell 10 c++ qt qml qt-quick qt5

如何将可拆卸区域添加到QML ApplicationWindow?

以下面的应用程序(Tiled)为例.它有多个可拆卸区域.在第一张图像中,所有区域都附着,而在第二张图像中,区域正在分离/重新连接:

在此输入图像描述

从C++开始,这可以用QDockWidget实现(参见这个问题).但是QML有解决方案吗?

Max*_*sov 5

我做了一个简单的工作示例。你可以在这里找到它。一定有足够多的评论供你整理。

我使用了这样的动态创建对象:

  • 动态创建组件(DetachableItem.qml)并将其分配给属性(不是必需的,但更容易找到它)
  • 为该组件的attached属性创建连接,当它发生变化时我可以调用一些函数;
  • 将项目移动到另一个窗口中,将对象推入其data属性
  • 以同样的方式将其移回 - 将其推到data主窗口的属性并隐藏单独的窗口。

请随意提出问题或提出一些改进建议。我对如何改进它的任何建议感兴趣!

UPD:我用新的提交更新了示例,其中摆脱了动态对象创建。如果您仍然对动态对象创建感兴趣,可以查看此提交


Max*_* Go 1

作为一种可能的解决方案,您可以创建 custom QDialog,并在其中使用从适当的 qml 文件加载的QQuickView所需 qml 内容。与主 qml 窗口和对话框的通信将通过自定义对话框完成并在其中定义。Q_PROPERTYQ_INVOKABLE

QDialog例如,指向实例的指针可以在 的帮助下作为上下文属性传播到 QML QQmlContext::setContextProperty