如何在 MacOS/X 程序中重命名 program-name menu-label?
How to rename the program-name menu-label in a MacOS/X program?
我有一个 Qt-based GUI 程序 运行 在 MacOS/X 下,我希望能够更改该程序第一个 menu-header 的标签,即这张截图中红圈圈出的标签:
是否有程序化的方式来做到这一点? objective-C/"native" 解决方案就足够了,假设不存在 Qt-based 解决方案。
一些背景信息(对于那些正确地怀疑这里有 X/Y 问题的人):我的 MacOS/X 软件分发包括几个不同的 Qt-based 程序,为了避免不得不分发他们都使用的共享库的多个冗余副本,避免必须编写自定义安装程序,所有可执行文件都放在同一 .app 包的 Contents/MacOS
子文件夹中,如屏幕截图所示:
对于 运行 软件,用户单击 .app-folder 的图标以启动“主”应用程序,然后在该 GUI 中有各种 buttons/menus可以根据需要将“其他”应用程序作为 child 进程启动;并且一切正常,除了 child 进程的第一个菜单标签始终显示为“主”应用程序的名称(如捆绑包 Info.plist
文件中的 CFBundleExecutable
标记中所列) 而不是 child-program 自己的名字,我希望能够更改它,以便它显示自己的 program-name。
以下代码(Swift,对于移植到 ObjC 应该很简单)更改菜单的名称:
NSApp.mainMenu?.item(at: 0)?.submenu?.title = "child-program-name"
但是,使用这种方法,一旦名称更改,菜单将不再以粗体显示,因为它与应用程序的名称不匹配。事实上,即使改回应用程序的名称,菜单标题也不再是粗体。这似乎是一个 long-standing 问题;参见 set titles of items in my app's main menu?。不幸的是 NSMenu
没有像 NSMenuItem
.
这样的 attributedTitle
属性
我有一个 Qt-based GUI 程序 运行 在 MacOS/X 下,我希望能够更改该程序第一个 menu-header 的标签,即这张截图中红圈圈出的标签:
是否有程序化的方式来做到这一点? objective-C/"native" 解决方案就足够了,假设不存在 Qt-based 解决方案。
一些背景信息(对于那些正确地怀疑这里有 X/Y 问题的人):我的 MacOS/X 软件分发包括几个不同的 Qt-based 程序,为了避免不得不分发他们都使用的共享库的多个冗余副本,避免必须编写自定义安装程序,所有可执行文件都放在同一 .app 包的 Contents/MacOS
子文件夹中,如屏幕截图所示:
对于 运行 软件,用户单击 .app-folder 的图标以启动“主”应用程序,然后在该 GUI 中有各种 buttons/menus可以根据需要将“其他”应用程序作为 child 进程启动;并且一切正常,除了 child 进程的第一个菜单标签始终显示为“主”应用程序的名称(如捆绑包 Info.plist
文件中的 CFBundleExecutable
标记中所列) 而不是 child-program 自己的名字,我希望能够更改它,以便它显示自己的 program-name。
以下代码(Swift,对于移植到 ObjC 应该很简单)更改菜单的名称:
NSApp.mainMenu?.item(at: 0)?.submenu?.title = "child-program-name"
但是,使用这种方法,一旦名称更改,菜单将不再以粗体显示,因为它与应用程序的名称不匹配。事实上,即使改回应用程序的名称,菜单标题也不再是粗体。这似乎是一个 long-standing 问题;参见 set titles of items in my app's main menu?。不幸的是 NSMenu
没有像 NSMenuItem
.
attributedTitle
属性