在 qml 的另一个文件中调用 javascript

calling javascript in another file in qml

我正在尝试覆盖 QML 应用程序 window 中的 onClosing 事件。

window 的 qml 很简单:

ApplicationWindow {
    id: rootWindow
    objectName: "window"
    visible: true
    width: 800
    height: 480

    property Component loginForm: LoginView {}

    onClosing: {
        loginForm.logout()
    }
}

LoginView 视图也很简单:

Rectangle {
    id: view    
    function logout() {
        console.log("Logout called");
    }
}

现在,它 returns 一个错误:

TypeError: Property 'logout' of object QQmlComponent(0x9287150) is not a function

我也试过 loginForm.view.logout() 和这个 returns 在:

TypeError: Cannot call method 'logout' of undefined

我认为 QML 有问题,因为您的 属性 是 Component 类型。您正在将 LoginView 分配给 Component 类型的 属性,它是 Component 的继承后代。如果您将 属性 更改为 LoginView 类型,它将起作用:

property LoginView loginForm : LoginView{}

如果这实际上不是您想要由主模块导出的 属性,您可以简单地实例化它而不创建 属性,但仍然给它一个模块范围标识符:

LoginView{ id: loginForm }

执行其中任一操作即可使用该功能。