标签:c multithreading macos qt
我有一个通常使用标准图形界面运行的应用程序.但是,对于某些长时间运行的任务,它会生成在“脚本模式”下运行的同一应用程序的其他进程,我将从父进程控制它.一切都很好,除了对于每个子进程我得到另一个停靠图标弹出一两秒然后消失.
有没有办法在没有应用程序图标出现在Dock上的情况下运行应用程序?我无法编辑info.plist或任何东西,因为通常我想要停靠图标.必须能够通过更改进程上的属性或通过命令行参数来设置该选项.我完全控制了应用程序的源代码.它是用C(Qt)编写的,但是针对本机Cocoa库的解决方案很好.
如果我把这个代码放到一个单独的应用程序中,它会导致重复,所以我宁愿保持原样.我不能在后台线程中运行长时间运行的任务,因为它们正在做必须在GUI线程中完成的事情. (在Qt中,您无法在后台线程上可靠地使用字体,像素图或将SVG内容渲染到QGraphicsScene上.)
有解决方案吗
解决方法:
从here开始,您可以:
[NSApp setActivationPolicy: NSApplicationActivationPolicyAccessory];
要么
[NSApp setActivationPolicy: NSApplicationActivationPolicyProhibited];
这应该隐藏停靠图标.有关NSApplicationActivationPolicy的一些文档,请参见here.
在Python中,隐藏停靠图标的代码是:
# https://stackoverflow.com/a/9220857/133374
import AppKit
# https://developer.apple.com/library/mac/#documentation/AppKit/Reference/NSRunningApplication_Class/Reference/Reference.html
NSApplicationActivationPolicyRegular = 0
NSApplicationActivationPolicyAccessory = 1
NSApplicationActivationPolicyProhibited = 2
AppKit.NSApp.setActivationPolicy_(NSApplicationActivationPolicyProhibited)
另见相关问题“How to hide the Dock icon”.
如果你想避免在开头就弹出停靠图标,你可以这样做:
import AppKit
info = AppKit.NSBundle.mainBundle().infoDictionary()
info["LSBackgroundOnly"] = "1"
标签:c,multithreading,macos,qt 来源: https://codeday.me/bug/20190927/1824070.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。