我有一个需要在VST插件中使用的Qt应用程序。然而,将Qt应用程序嵌入到插件中似乎是一项非常复杂的任务(因为QCoreApplication事件循环,因为主机也可能使用Qt的冲突版本,并且因为插件需要找到自己的Qt库集)。 / p>
作为一种解决方法,我想将我的独立Qt应用程序渲染到VST插件的窗口(我知道HWND / NSView)。 它在Windows上很容易做到,但在macOS上却有点棘手。
tldr:我读过有关NSWindowSharingType / NSWindowSharingReadWrite的文章,它似乎提供了我在macOS上所需要的东西(将一个进程'窗口渲染到另一个进程'窗口),但我无法找到任何使用它的例子。 有人知道这个以及如何使用它吗?或者任何其他方式可以让我将Qt小部件从不同的进程渲染到NSView中?
答案 0 :(得分:0)
这方面的解决方案非常名义:
您的Qt副本必须放入其自己唯一的命名空间 - 即您必须构建自己的Qt。在专业的环境中你无论如何都应该这样做。
QCoreApplication
事件循环与NSRunLoop
完全集成。除了启动事件循环之外,您不需要调用exec()
:即,一旦启动就退出事件循环,让主机应用程序完成剩下的工作。这个成语是:
QTimer::singleShot(0, app, &QCoreApplication::quit);
app->exec();
// return to the host app here
该插件可以并且应该捆绑自己的Qt,作为捆绑框架,或通过静态链接。
您也可以将NSView*
传递给QWindow::fromWinID
,IIRC。