如何在 QML 应用程序窗口中添加可分离区域?
以 Tiled 应用程序为例,它有多个可分离区域。在第一幅图像中,所有区域都已连接,而在第二幅图像中,一个区域正在分离 / 重新连接的过程中:
从 C++ 中,可以通过 QDockWidget 实现这一点(请参见此问题)。但是在 QML 中有没有解决方案呢?
如何在 QML 应用程序窗口中添加可分离区域?
以 Tiled 应用程序为例,它有多个可分离区域。在第一幅图像中,所有区域都已连接,而在第二幅图像中,一个区域正在分离 / 重新连接的过程中:
从 C++ 中,可以通过 QDockWidget 实现这一点(请参见此问题)。但是在 QML 中有没有解决方案呢?
这只是一个实现该行为的想法。看一下Window QML类和动态对象创建,以实际请求创建窗口。
以下是一些(未经测试的)伪代码,只是为了给出一个想法 "DockWindow.qml":
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();
}
}
}
QDialog
,在其中使用 QQuickView
并加载来自相应 qml 文件的所需 qml 内容 (已加载)。通过您的自定义对话框中的 Q_PROPERTY
和 Q_INVOKABLE
定义与主 qml 窗口和对话框进行通信。例如,可以使用 QQmlContext::setContextProperty
将指向您的 QDialog
实例的指针作为上下文属性传播到 QML 中。