Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/155.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ DLL中的Qt GUI环境(VST插件)_C++_Qt_User Interface_Dll_Vst - Fatal编程技术网

C++ DLL中的Qt GUI环境(VST插件)

C++ DLL中的Qt GUI环境(VST插件),c++,qt,user-interface,dll,vst,C++,Qt,User Interface,Dll,Vst,我想使用QtGUI库作为VST插件的用户界面。VST插件是windows上的DLL。主机应用程序调用DLL上的各种函数,包括openGUI() 我想知道如何从DLL使用QtGUI;我做了一些研究,看看可能的选择,但我不完全确定的局限性 主要问题是在何处创建QApplication对象并对其调用exec()(该函数在应用程序退出之前不会返回) 我已经看过中给出的解决方案,但在进一步阅读后,该解决方案似乎无法在Mac OS X上运行,因为Cocoa对GUI可以运行的特定线程有更严格的限制。这真的有点

我想使用QtGUI库作为VST插件的用户界面。VST插件是windows上的DLL。主机应用程序调用DLL上的各种函数,包括
openGUI()

我想知道如何从DLL使用QtGUI;我做了一些研究,看看可能的选择,但我不完全确定的局限性

主要问题是在何处创建
QApplication
对象并对其调用
exec()
(该函数在应用程序退出之前不会返回)

我已经看过中给出的解决方案,但在进一步阅读后,该解决方案似乎无法在Mac OS X上运行,因为Cocoa对GUI可以运行的特定线程有更严格的限制。这真的有点像黑客

我也看到了,但这依赖于
QMfcApp
QWinWindow
,它们似乎不再是Qt库的一部分

这是我的DLL生成新应用程序的唯一方法吗?大概我可以先调用
QProcess
,然后使用一些共享内存在GUI应用程序和我的VST DLL之间共享?有人遇到过这种问题吗?我是不是走上了一条糟糕的道路,还是有什么我还没有想到的

更新


经过进一步的研究,我遇到了这个班。我已经看到了这样一种说法,即可以从您自己(插件的宿主)的事件循环调用
QApplication::processEvents()
,而不是调用
QApplication::exec()
。有人试过这样做吗?

从VST DLL执行Qt进程,然后使用IPC在它们之间共享内存(或使用消息传递等)。

您的实际问题似乎是在mac上使用Qt作为VST插件,因为据报它在Windows上工作-请参阅()和

有一个关于在mac上使用Qt作为VST插件的成功报告,但另一方面,在同样的问题上也有一个成功的例子


我知道它不能回答您的问题,但我建议您使用其他更适合VST插件的UI库,如和。

您是否在这方面做得不好?不一定,如果你正在开发一个免费的VST插件。然而,尽管我非常喜欢Qt用于一般软件开发,但它并不特别适合VST开发。它的许可是这样的,你不能静态链接一个DLL和它的库用于商业用途,除非你为它付费;而且相当贵。当他们把它做成LGPL时,你就可以把你所有的依赖关系都放在一个目标程序或DLL目录下的独立的商业程序中,这些依赖关系可以很容易地运行到十几个DLL中,并且它会运行,你可以将其商业化销售;没有购买许可证

VST用户习惯于随意移动DLL以移动效果;在LGPL下,他们不能只有一个可以移动。乱扔目录和大量额外的DLL的扫描会使扫描过程变慢。如果你的VST插件在文件夹中有很多依赖项,那么它对商业插件的效果就不会像对其他商业插件那样好,因为你不可能在一个DLL中生成一个插件并静态链接到Qt库,而不需要为Qt支付很多钱,或者使它成为GPL或类似的东西

编辑:一个反对它的论点是,Qt对其信号和插槽进行字符串比较。使用新的connect重载处理信号和插槽的新方法不依赖字符串


在一个本地录音室的Waves插件安装中,我注意到在{Waves Install Directory}/Application目录中,有一些WavesQtLibs文件夹具有Qt库。看起来他们在应用程序中使用Qt,但如果他们自己在插件中使用Qt,他们要么静态链接,要么不使用Qt。由于Waves支持多种平台的应用程序和插件,我可以看出Qt对他们有多大的吸引力。据推测,他们可以负担开发Qt许可证的费用。他们似乎在应用程序中使用Qt和DLL,这将使操作系统之间的移植更容易。我不知道他们是否有LGPL使用的必要通知。我不知道他们是否在为自己的插件使用Qt静态链接,他们是否在使用JUCE框架(虽然有点贵,但也没有因为价格而影响有限的用户群),或者其他什么。

我在windows上做过(第一个使用独立线程的解决方案)。这真的很难,因为我们需要从dllmain触发一个单独的线程,这是被禁止的。QMfcApp从来不是Qt的一部分,而是所谓的“解决方案”。你在这里找到的。祝你好运我想知道还有哪一个库,也许你提到的两个库,真正解决了这个问题。我目前正在调查哪种跨平台gui库可用于类似类型的插件。如果有人有一个关于使用某个特定库的可行性的链接,我很想听听。