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

时间:2016-11-14 17:09:55

标签: qt qml qtquick2

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

窗口的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");
    }
}

现在,它会返回一个错误:

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

我也尝试了loginForm.view.logout(),然后返回:

TypeError: Cannot call method 'logout' of undefined

1 个答案:

答案 0 :(得分:2)

我认为QML遇到了麻烦,因为您的属性属于Component类型。您正在将LoginViewComponent的继承后代)分配给类型为Component的属性。如果您将属性更改为LoginView类型,则可以使用:

property LoginView loginForm : LoginView{}

如果这实际上不是您希望由主模块导出的属性,您只需在不创建属性的情况下实例化它,但仍然为其提供模块范围标识符:

LoginView{ id: loginForm }

执行其中任何一项操作都可以访问该功能。