在 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 }
执行其中任一操作即可使用该功能。
我正在尝试覆盖 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 }
执行其中任一操作即可使用该功能。