我有一个 Qt 应用程序(出于此问题范围之外的原因)将其每个窗口作为单独的进程启动。
这工作正常,但在 MacOS/X 下,每个窗口/进程在 Dock 中显示为单独的条目。因此,当用户打开十几个窗口时,Docks 中有十几个相同的图标,这不是很有帮助(因为很难分辨哪个是哪个,并且图标开始变小)。
有没有办法告诉 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);
}
只需将上面的代码添加到您的应用程序委托(delegate)中,当进程退出事件时,应用程序的 Dock 图标就会消失。要在进程转换为 UIElement 应用程序后保持窗口可见,请发送
orderFrontRegardless
信息。 (我知道这很 hacky - 但这一定是非标准窗口/进程处理的代价)可能您还应该维护一个 Dock 菜单,允许您的用户选择隐藏的窗口。
您可以从“主”应用程序中动态添加条目。详情可查看"Dynamically Adding Menu Items With the Application Delegate" Dock Tile 编程指南的部分。
更新:
我稍微更改了上面的代码示例,因为以前的方法在重新激活应用程序后导致主菜单无响应。
关于macos - 多处理 Qt 应用程序 : How can I limit it to a single icon in the MacOS/X Dock?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16994331/