我有一個在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