我有一个捆绑的图形用户界面,服务和托盘。注意,他们是三个独立的进程。
这听起来可能很奇怪,托盘是服务的一种表示,用户可以打开GUI,如果没有托盘,GUI将创建一个托盘。
因此,在我的GUI代码中,我有如下内容:
QProcess::startDetached("my-tray");
由于GUI是主要的可执行文件,因此配置了整个包。
问题是:当GUI启动一个托盘时,我可以在Dock中看到两个图标。我想要的是在Dock中没有任何额外图标的情况下启动托盘。
我已经尝试将QT_MAC_DISABLE_FOREGROUND_APPLICATION_TRANSFORM设置为建议的真here。
我尝试过按照here的建议以编程方式更改激活策略。
我不认为在plist文件中将LSUIElement设置为1对我来说是一个有效的解决方案,因为我仍然希望GUI在停靠栏中显示一个图标。
目前,我把所有进程都放在捆绑包内的MacOS文件夹中。将托盘移到Resources文件夹中导致它无法加载一些可可库。
此应用程序无法启动,因为它无法在“"中找到或加载Qt平台插件“可可”。
整个项目是一个用C++编写的Qt项目,托盘进程本质上是一个QSystemTrayIcon。
2条答案
按热度按时间6jjcrrmo1#
问题是:当GUI启动托盘时,我可以看到停靠栏中的两个图标。
一种可能的解决方案是使"托盘"进程成为其自己的应用程序捆绑包(并且仍然放在主应用程序的捆绑包内)和设置
在塔盘束的
Info.plist
中。ttygqcqt2#
对于问题的这一部分:
目前,我把所有进程都放在捆绑包内的macos文件夹中。将托盘移到resources文件夹中导致它无法加载一些cocoa库。
This application failed to start because it could not find or load the Qt platform plugin "cocoa" in "".
Qt似乎只在
MacOS
目录中查找它的"插件"。为了解决这个问题,并能够将您的助手可执行文件放在Resources
文件夹中,您需要在构造QApplication
之前将以下内容添加到守护进程初始化中(确切的lib路径取决于您的语言,不确定在C++中是如何完成的):