6

我想编写一个应该由非 QT 应用程序加载的 DLL。结果,当我的 DLL 被加载时,我没有任何QApplication/QCoreApplication. 结果我的信号/插槽机制不起作用。

我在 Qt 论坛中进行了深入搜索,但还没有找到关于如何处理此类问题的好答案。我创建了一个QThread将我移动QObjects到那个线程并创建了一个假的并在 QThread 的函数中QApplicationCore调用它的函数。这样我的 Signal Slot 机制就起作用了,但我对这种间接解决方案不满意。我应该能够从主非 Qt 线程的执行空间激活我的线程槽。使用此类 dll 插件的正确方法是什么?欢迎直接回答和阅读资源推荐。谢谢exec()run()

注意:加载我的 DLL 的外部应用程序是一个 Windows 应用程序。这是第三方应用程序,我无法触摸它。

4

1 回答 1

6

Qt 信号和插槽需要一个事件循环才能运行。您必须在您的 QObjects 存在的线程中运行事件循环。当然,您不能在应用程序的主线程中运行它(因为它不使用 Qt),所以,对,启动 a QThread,将您的 QObjects 移动到该线程(或在run()方法中创建这些对象)并exec()在线程的run()方法中运行是正确的解决方案。

于 2012-12-28T12:37:52.793 回答