在 Mac 上启动没有停靠图标的 Qt 托盘进程
Start a Qt tray process without dock icon on Mac
我有一个包含 GUI、服务和托盘的捆绑包。请注意,它们是三个独立的进程。
这听起来可能很奇怪,托盘是服务的代表,如果 none 退出,用户可以打开 GUI 创建一个托盘。
所以在我的 GUI 代码中我有如下内容:
QProcess::startDetached("my-tray");
整个包被配置为 GUI 是主要的可执行文件。
问题是:当 GUI 启动托盘时,我可以在停靠栏中看到两个图标。我想要的是在 dock 中没有任何额外图标的情况下启动托盘。
我已尝试按照建议将 QT_MAC_DISABLE_FOREGROUND_APPLICATION_TRANSFORM 设置为 true here。
我已尝试按照建议以编程方式更改激活策略 here。
我认为在 plist 文件中将 LSUIElement 设置为 1 对我来说不是一个有效的解决方案,因为我仍然希望 GUI 在停靠栏中显示一个图标。
目前,我将所有进程放在捆绑包内的 MacOS 文件夹中。将托盘移动到 Resources 文件夹导致无法加载某些 cocoa 库。
This application failed to start because it could not find or load the
Qt platform plugin "cocoa" in "".
整个项目是一个用C++编写的Qt项目。托盘进程本质上是一个QSystemTrayIcon。
THE PROBLEM IS: when the GUI starts a tray, I can see two icons in dock.
一个可能的解决方案是使 "tray" 进程成为它自己的应用程序包(并且仍然放在主应用程序的包中)并设置
<key>NSUIElement</key>
<string>1</string>
在托盘束的 Info.plist
中。
我有一个包含 GUI、服务和托盘的捆绑包。请注意,它们是三个独立的进程。
这听起来可能很奇怪,托盘是服务的代表,如果 none 退出,用户可以打开 GUI 创建一个托盘。
所以在我的 GUI 代码中我有如下内容:
QProcess::startDetached("my-tray");
整个包被配置为 GUI 是主要的可执行文件。
问题是:当 GUI 启动托盘时,我可以在停靠栏中看到两个图标。我想要的是在 dock 中没有任何额外图标的情况下启动托盘。
我已尝试按照建议将 QT_MAC_DISABLE_FOREGROUND_APPLICATION_TRANSFORM 设置为 true here。
我已尝试按照建议以编程方式更改激活策略 here。
我认为在 plist 文件中将 LSUIElement 设置为 1 对我来说不是一个有效的解决方案,因为我仍然希望 GUI 在停靠栏中显示一个图标。
目前,我将所有进程放在捆绑包内的 MacOS 文件夹中。将托盘移动到 Resources 文件夹导致无法加载某些 cocoa 库。
This application failed to start because it could not find or load the Qt platform plugin "cocoa" in "".
整个项目是一个用C++编写的Qt项目。托盘进程本质上是一个QSystemTrayIcon。
THE PROBLEM IS: when the GUI starts a tray, I can see two icons in dock.
一个可能的解决方案是使 "tray" 进程成为它自己的应用程序包(并且仍然放在主应用程序的包中)并设置
<key>NSUIElement</key>
<string>1</string>
在托盘束的 Info.plist
中。