macos - 多处理 Qt 应用程序 : How can I limit it to a single icon in the MacOS/X Dock?

标签 macos qt multiprocessing dock

我有一个 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/

相关文章:

c++ - 使用 Qt 从网站提取信息?

python - 使用 python 和 tkinter 实时绘制串行数据

python - 优化包含 8 个 for 循环的嵌套循环以最小化函数

通过 QueueHandler 的 Python 多处理日志记录

mysql - 使用 HomeBrew 安装 MySQL

ios - Xcode,Bundle Display Name 可以作为 Product Name 的变量吗

xcode - 拖放后窗口失去焦点

macos - 你如何打开一个带有特定路径的终端?

python - 使用 QtCore.SIGNAL 传递参数

c++ - 在 Qt 应用程序菜单栏的主菜单中添加和本地化菜单项