DLL(VST插件)中的Qt GUI环境
Qt GUI environment in a DLL (VST Plugin)
我想使用Qt GUI库作为VST插件的用户界面。VST插件是windows上的DLL。主机应用程序调用DLL上的各种函数,包括openGUI()
之类的函数。
我想知道如何从DLL使用QtGUI;我做了一些研究来寻找可能的选择,但我不完全确定其局限性。
主要问题是在哪里创建QApplication
对象并对其调用exec()
(这是一个直到应用程序退出才返回的函数)。
我已经看过这篇文章中给出的解决方案,但在进一步阅读后,这个解决方案似乎在Mac OS X上不起作用,因为Cocoa对GUI可以运行的特定线程有更严格的限制。这真的有点像黑客。
我也看到了这个解决方案,但它依赖于QMfcApp
和QWinWindow
,它们似乎不再是Qt库的一部分。
唯一的办法是让我的DLL自己产生一个新的应用程序吗?假设我可以通过调用QProcess
来启动一个,并使用一些共享内存在GUI应用程序和我的VST DLL之间共享?有人遇到过这种问题吗?我是不是走上了一条糟糕的道路,还是有什么我还没有想到的?
更新
经过进一步的研究,我发现了QAbstractEventDispatcher
类。我看到这篇文章,它似乎说可以从你自己(我的插件的主机)的事件循环中调用QApplication::processEvents()
,而不是调用QApplication::exec()
。有人试过这样做吗?
您的实际问题似乎是在mac上使用Qt作为VST插件,因为据报道它可以在Windows上工作-请参阅此处(完整的源代码树)和此处。
在Qt论坛上有一篇关于在mac上使用Qt进行VST插件的成功报道,但另一方面,在同一问题上也有一个开放的bug。
我知道它不能回答你的问题,但我建议使用其他更适合VST插件的UI库,如JUCE和WDL。
你这样做是不是很糟糕?不一定,如果你正在开发一个免费的VST插件;或者是一个成功的商业插件开发人员。然而,尽管我非常喜欢用于通用软件开发的Qt,但它并不特别适合VST开发。它的许可是这样的,你不能静态链接DLL和它的库用于商业用途,除非你为此付费;而且相当昂贵。当他们制作LGPL时,它让你可以将所有的依赖项(很容易运行到十几个DLL中)放在目标程序或DLL目录中,用于独立的商业程序,它会运行,你可以将其商业化销售;没有购买许可证。
VST用户习惯于随意移动DLL,以便移动效果;在LGPL的领导下,他们不可能只有一个人可以四处走动。目录中有很多额外的DLL需要扫描,这会使扫描过程变慢。在你的VST插件的文件夹中有很多依赖关系,这对商业插件来说不会像对其他商业插件那样好用;因为你不能在一个DLL中生成一个插件,并将其与Qt库静态链接,而不为Qt支付大量费用,或者使其成为GPL或诸如此类的东西。
编辑:反对它的一个论点是,Qt会对其信号和插槽进行字符串比较。使用新的连接重载来处理信号和插槽的新方法不依赖于字符串。
在当地的一家录音棚,在Waves插件安装中,我注意到在{Waves Install Directory}/Application目录中,有WavesQtLibs文件夹,其中包含Qt库。他们似乎在为自己的应用程序使用Qt,但如果他们自己将Qt用于插件,他们要么静态链接,要么不使用Qt。由于Waves支持多个平台的应用程序和插件,我可以看到Qt对他们的吸引力。据推测,他们可以负担得起Qt的开发许可证。看来他们的应用程序使用的是带有DLL的Qt,这将使操作系统之间的端口更容易。我不知道他们是否有LGPL使用的必要通知。我不知道他们是否在为自己的插件使用静态链接的Qt,是否在使用JUCE框架(虽然有点贵,但也没有在价格上骗取其有限的用户基础),或者其他什么。
从VST DLL执行Qt进程,然后使用IPC在它们之间共享内存(或使用消息传递等)。
- Qt GUI使用Qfiledialogbox和qlabel显示视频,这是我的代码
- 试图打开并读取一个.txt文件,但它从原始文件中删除了实际文本(Qt GUI C++
- 是否可以在QT GUI应用程序中处理事件时播放加载动画指示器?
- 从其他std ::线程更新QT GUI
- 无法使用 Visual Studio 2010 和 Qt 版本 4.8.0 创建"Qt Gui Application"
- "hijacking" 给定根 QWidget* 的 Qt gui
- 尽管有线程,Qt GUI 仍挂起
- C++ Qt GUI update
- 在QT GUI中创建一个全局对象
- 在已经运行的C 控制台应用程序上实现QT GUI
- QT GUI最简单的方法可以从另一堂课访问MainWindow
- 通过Qt-tcp套接字更改Qt-GUI
- ROS-Qt GUI - 如何分发线程
- 由于线程问题,Qt-Gui没有更新
- 为Python逻辑创建一个C++Qt Gui
- Qt GUI应用程序在与GUI交互时停止实时进程
- 如何在C 中制作QT GUI应用,而不会内存泄漏
- 如何将QT GUI应用程序的版本打印到主机上
- 使用由Eclipse中的Qt设计器创建的Qt GUI
- Qt Gui 应用程序部署