【发布时间】:2012-09-30 01:58:56
【问题描述】:
我想使用 Qt GUI 库作为 VST 插件的用户界面。 VST 插件是 Windows 上的 DLL。主机应用程序调用 DLL 上的各种函数,包括 openGUI()。
我想知道如何从 DLL 中使用 Qt GUI;我已经做了一些研究来看看可能的选择,但我不完全确定这些限制。
主要问题是在哪里创建QApplication 对象并在其上调用exec()(这是一个在应用程序退出之前不会返回的函数)。
我查看了this post 中给出的解决方案,但在进一步阅读之后,似乎该解决方案不适用于 Mac OS X,因为 Cocoa 对 GUI 可以运行的特定线程有更多限制。这真的有点像黑客。
我也见过this solution,但这依赖于QMfcApp 和QWinWindow,它们似乎不再是Qt 库的一部分。
我的 DLL 是不是只有这样才能自己生成一个新的应用程序?大概我可以从调用QProcess 开始,并使用一些共享内存在GUI 应用程序和我的VST DLL 之间共享?有没有人遇到过这种类型的问题?我是不是走上了一条糟糕的道路,还是我还没有想到什么?
更新
经过进一步研究,我遇到了QAbstractEventDispatcher 类。我见过this post,它似乎说可以从您自己的(我的插件的主机)事件循环中调用QApplication::processEvents(),而不是调用QApplication::exec()。有人试过这样做吗?
【问题讨论】:
-
我已经在 Windows 上完成了(第一个使用单独线程的解决方案)。这真的很困难,因为我们需要从 dllmain 中启动一个单独的线程,这是被禁止的。 QMfcApp 从来都不是 Qt 的一部分,而是一个所谓的“解决方案”。你可以在这里找到它qt.gitorious.org/qt-solutions/qt-solutions/trees/master/…。祝你好运!
标签: c++ qt user-interface dll vst