我有一个在Windows和Mac上运行的应用程序。 该应用程序是用QML编写的。 我的QML代码中最外层的组件是ApplicationWindow
。 ApplicationWindow
组件的API有一个名为menuBar
的属性。 这里是一个虚拟的例子,它具有MenuBar
和退出Action
再现了这一点:QML如何处理Mac上菜单栏的应用程序退出?
ApplicationWindow {
id: _applicationWindow
visible: true
width: 640
height: 480
title: qsTr("Hello World")
Component.onCompleted: {
console.info("ApplicationWindow completed.")
}
menuBar: MenuBar {
Menu {
title: "File"
MenuItem {
action: Action {
id: _myQuttingAction
text: "Quit MyApp"
shortcut: "Ctrl+Q"
onTriggered: {
// deinit...
console.info("I got called!")
Qt.quit()
}
}
}
}
}
}
当我跑我的Mac上的应用程序下面的顶部菜单栏标题显示:
Apple Icon menu | MyApp | File
正如你可以看到下拉列表是空的。实际上它不是空的,因为它是可按下的,如果我按下它,它会在动作的onTriggered
事件中使用所有deinit调用退出我的应用程序。
如果我放下“MyApp”菜单,在底部我看到“退出MyApp”,其快捷键为Cmd+Q
。如果我按下这个键,它也会退出我的应用程序,但是不会调用我的操作的事件,因此我的真实应用程序在退出时崩溃。
不幸的是,按Cmd+Q
也会调用退出“MyApp”而不是我指定的操作。
在Windows上,我根本没有这个问题,“Quit MyApp”出现在“File”菜单下,并且做了我期望的操作。
我试图谷歌这个问题,并阅读文档没有运气呢。有人知道这里发生了什么?
嗨@dtech,设置'close.accepted = false'仍然会让我的应用程序退出,甚至尝试使用上面的虚拟示例。 – Silex
为什么字符串“退出MyApp”出现在“文件”菜单下拉? – Silex
@Silex看到更新,除了我目前没有想法,其他人可能会提供帮助。 – dtech