[英]How to add detachable areas (QDockWidget) to a QML application
如何向 QML ApplicationWindow 添加可拆卸區域?
以下面的應用程序(Tiled)為例。 它有多個可拆卸區域。 在第一個圖像中,所有區域都已附加,而在第二個圖像中,區域正在分離/重新附加:
在 C++ 中,這可以通過QDockWidget來實現(參見這個問題)。 但是 QML 有解決方案嗎?
作為一種可能的解決方案,您可以創建自定義QDialog
,在其中使用QQuickView
並從適當的 qml 文件加載所需的 qml 內容。 與主 qml 窗口和對話框的通信將通過自定義對話框中定義的Q_PROPERTY
和Q_INVOKABLE
完成。
例如,指向QDialog
實例的指針可以在QQmlContext::setContextProperty
的幫助下作為上下文屬性傳播到 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();
}
}
}
注意:此代碼不能開箱即用,可能會導致“父”屬性上的依賴循環!
您可以使用他們已將其導出到KDDockWidget
的 KDDockWidget,但它不是 LGPL..
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.