按下按钮时 QML 动态加载窗口,但如果存在则聚焦

时间:2021-02-17 11:46:42

标签: qt qml

我的主 ApplicationWindow (root) 中有一个按钮,可动态加载并打开在单独的 .qml 文件中声明的第二个不同的 ApplicationWindow。

Button {
    id: btnLogger
    text: "Logger"
    onClicked: {
        var component = Qt.createComponent("logger.qml")
        var window    = component.createObject(logRoot)
        window.show()
    }
}

这适用于在单击按钮时打开窗口。后续点击会创建更多新窗口。

我的意图是后续的点击应该聚焦于先前存在的窗口。如果新窗口稍后关闭,则单击该按钮应恢复为打开窗口。

即如果窗口当前不存在或存在但已关闭,则创建并打开它;否则,集中注意力。

如何在 qml 内完成此操作?或者,我目前正在从我的 C++ 中的 QQmlApplicationEngine 加载应用程序,我如何使用它来实现此功能?

1 个答案:

答案 0 :(得分:1)

我上面评论的示例代码:

Button {
    id: btnLogger
    text: "Logger"
    property var wnd: undefined
    onClicked: {
        if(wnd == undefined)
        {
            var component = Qt.createComponent("logger.qml")
            wnd = component.createObject(logRoot);
            wnd.closing.connect(function() { btnLogger.wnd = undefined;});
            wnd.show();
        }
        else
        {
            wnd.requestActivate();
        }
    }
}
相关问题