C++ 如何将可分离区域(QDockWidget)添加到QML应用程序
如何将可分离区域添加到QML应用程序窗口 以下面的应用程序(平铺)为例。它有多个可分离的区域。在第一个图像中,所有区域都已附着,而在第二个图像中,一个区域正在分离/重新附着:C++ 如何将可分离区域(QDockWidget)添加到QML应用程序,c++,qt,qml,qt5,qt-quick,C++,Qt,Qml,Qt5,Qt Quick,如何将可分离区域添加到QML应用程序窗口 以下面的应用程序(平铺)为例。它有多个可分离的区域。在第一个图像中,所有区域都已附着,而在第二个图像中,一个区域正在分离/重新附着: 从C++中,可以通过(参见)实现。但是有没有使用QML的解决方案?作为一种可能的解决方案,您可以创建自定义的QDialog,在其中使用适当QML文件中所需的QML内容。与主qml窗口和对话框的通信将通过自定义对话框中的Q_属性和Q_可调用定义完成 例如,指向QDialog实例的指针可以在的帮助下作为上下文属性传播到QML
从C++中,可以通过(参见)实现。但是有没有使用QML的解决方案?作为一种可能的解决方案,您可以创建自定义的
QDialog
,在其中使用适当QML文件中所需的QML内容。与主qml窗口和对话框的通信将通过自定义对话框中的Q_属性
和Q_可调用
定义完成
例如,指向
QDialog
实例的指针可以在的帮助下作为上下文属性传播到QML 这只是一个如何实现这种行为的想法。看一看QML类,并根据请求实际创建一个窗口
一些(未经测试的)伪代码,只是想给出一个想法“DockWindow.qml”:
注意:这段代码不会开箱即用,可能会导致“parent”属性上的依赖循环我做了一个简单的工作示例。你可以找到它。一定有足够的评论供你整理 我使用动态创建对象,如下所示:
- 动态创建组件(DetachableItem.qml)并将其分配给属性(不需要,但更容易找到)
- 为这个组件的
属性创建连接,当它改变时我可以调用一些函数李>附加的
- 将项目移动到另一个窗口中,将对象推入其
属性数据
- 以相同的方式将其向后移动-将其推到主窗口的
属性并隐藏单独的窗口数据
UPD:我更新了新的提交,在那里我摆脱了动态对象的创建。如果您仍然对动态对象创建感兴趣,您可以在投票结束时签出到:请解释为什么它太宽。我很确定这个功能有一个预定义的类,或者有一个创建可分离区域的特定方法。我还没有在QML中直接看到这个功能。创建浮动区域很容易,但我怀疑您想要一个可拆卸的窗口。如果设备是一部手机,那么它就没有多大用处,所以它的优先级可能很低list@Appleshell我目前面临着同样的问题。我查看了Qt文档,但没有找到任何内容,因此我认为它尚未实现。你在纯QML中找到解决方案了吗?@SteveTJS向下滚动到我的答案。我做了一个小例子看看我的相关工作我试过你更新的例子。我很感谢你把它公开给每个人。它就像一个符咒。
import QtQuick 2.0
import QtQuick.Window 2.2
Rectangle {
id: dockWidget
property Window window: null
property Item embedIn: null
parent: window ? window : embedIn
readonly property bool detached: window
function detach() {
if (!window) {
window = Qt.createQmlObject('
import QtQuick.Window 2.2
Window { flags: …; }
', dockWidget, "dockWidget");
}
}
function close() {
if (window) {
window.close();
}
}
}