macOS:渲染到另一个进程'窗口

时间:2018-05-02 17:35:05

标签: macos qt ipc nsview nswindow

我有一个需要在VST插件中使用的Qt应用程序。然而,将Qt应用程序嵌入到插件中似乎是一项非常复杂的任务(因为QCoreApplication事件循环,因为主机也可能使用Qt的冲突版本,并且因为插件需要找到自己的Qt库集)。 / p>

作为一种解决方法,我想将我的独立Qt应用程序渲染到VST插件的窗口(我知道HWND / NSView)。 它在Windows上很容易做到,但在macOS上却有点棘手。

tldr:我读过有关NSWindowSharingType / NSWindowSharingReadWrite的文章,它似乎提供了我在macOS上所需要的东西(将一个进程'窗口渲染到另一个进程'窗口),但我无法找到任何使用它的例子。 有人知道这个以及如何使用它吗?或者任何其他方式可以让我将Qt小部件从不同的进程渲染到NSView中?

1 个答案:

答案 0 :(得分:0)

这方面的解决方案非常名义:

  1. 您的Qt副本必须放入其自己唯一的命名空间 - 即您必须构建自己的Qt。在专业的环境中你无论如何都应该这样做。

  2. QCoreApplication事件循环与NSRunLoop完全集成。除了启动事件循环之外,您不需要调用exec():即,一旦启动就退出事件循环,让主机应用程序完成剩下的工作。这个成语是:

    QTimer::singleShot(0, app, &QCoreApplication::quit);
    app->exec();
    // return to the host app here
    
  3. 该插件可以并且应该捆绑自己的Qt,作为捆绑框架,或通过静态链接。

  4. 您也可以将NSView*传递给QWindow::fromWinID,IIRC。