Qt QML动态加载窗口上的按钮按下,但焦点,而不是如果存在

Qt QML动态加载窗口上的按钮按下,但焦点,而不是如果存在,qt,qml,Qt,Qml,我的主应用程序窗口(root)中有一个按钮,可以动态加载并打开另一个不同的应用程序窗口,该窗口在单独的.qml文件中声明 Button { id: btnLogger text: "Logger" onClicked: { var component = Qt.createComponent("logger.qml") var window = component.createObject(lo

我的主应用程序窗口(
root
)中有一个按钮,可以动态加载并打开另一个不同的应用程序窗口,该窗口在单独的
.qml
文件中声明

Button {
    id: btnLogger
    text: "Logger"
    onClicked: {
        var component = Qt.createComponent("logger.qml")
        var window    = component.createObject(logRoot)
        window.show()
    }
}
这对于在单击按钮时打开窗口非常有效。随后的单击将创建更多新窗口

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

i、 e.如果窗口当前不存在或已关闭,则创建并打开该窗口;否则,集中精力


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

我上面评论的示例代码:

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();
        }
    }
}

你为什么认为它应该这样工作?此代码将完全按照您编写的方式工作—创建一个组件,实例化并显示它(如果这是
窗口
)。如果你想这将集中现有的窗口,你必须改变逻辑。@folibis我知道它不会做我想要的。我展示了我目前拥有的,并询问我需要做些什么来实现新功能。你有没有一个编辑建议来帮助你自己和其他人更清楚地回答这个问题?请看下面我的答案。这个答案很好,谢谢你。但是我要澄清我的问题,因为它不是全部。如果用户关闭窗口,然后再次单击按钮,我希望窗口再次打开:我已经通过
If(wnd.active)wnd.requestActivate()实现了这一点;else wnd.show()
,但我会听取你的意见,然后接受你的答案。只要添加一个
事件处理程序,我就更新了答案。同样,您可以使用
连接
。这比我的解决方案好得多!我猜这意味着现在窗口在关闭后被垃圾收集,不像我在上面的评论中那样,窗口保持不变但不处于活动状态。