Jer*_*ner 5 macos qt dock multiprocessing
我有一个Qt应用程序(出于超出此问题范围的原因)将每个窗口作为一个单独的进程启动.
这样可以正常工作,但在MacOS/X下,每个窗口/进程都显示为Dock中的单独条目.因此,当用户打开十几个窗口时,码头上有十几个相同的图标,这不是很有用(因为很难分辨哪个是哪个,图标开始变小).
有没有办法告诉Dock在单个Dock图标下将所有这些进程组合在一起?(特定于Mac的API会很好)
您可以使用以下代码片段隐藏不活动进程的 Dock 磁贴:
- (void)applicationWillResignActive:(NSNotification *)notification
{
ProcessSerialNumber psn = {0, kCurrentProcess};
TransformProcessType(&psn, kProcessTransformToBackgroundApplication);
if([self.window isVisible])
{
[self.window performSelector:@selector(orderFrontRegardless) withObject:nil afterDelay:0.05];
}
}
- (void)applicationWillBecomeActive:(NSNotification *)notification
{
ProcessSerialNumber psn = {0, kCurrentProcess};
TransformProcessType(&psn, kProcessTransformToForegroundApplication);
SetFrontProcessWithOptions(&psn, kSetFrontProcessCausedByUser);
}
Run Code Online (Sandbox Code Playgroud)
只需将上述代码添加到您的应用程序委托中,当进程退出活动状态时,应用程序的 Dock 图标就会消失。
要在进程转换为 UIElement 应用程序后保持窗口可见,请发送一条orderFrontRegardless消息。(非常老套,我知道 - 但这一定是非标准窗口/进程处理的价格)
也许您还应该维护一个 Dock 菜单,允许用户选择隐藏的窗口。
您可以从“主”应用程序动态添加条目。详细信息可以在Dock Tile 编程指南的“使用应用程序委托动态添加菜单项”部分找到。
更新:
我稍微更改了上面的代码示例,因为以前的方法导致重新激活应用程序后主菜单无响应。