QPluginLoader 与 PyQt 模块作为插件:可能吗?

Posted

技术标签:

【中文标题】QPluginLoader 与 PyQt 模块作为插件:可能吗?【英文标题】:QPluginLoader with PyQt modules as plugins: possible? 【发布时间】:2010-04-22 14:33:50 【问题描述】:

感谢QPluginloader,我有一个加载外部插件的 C++ 应用程序。QPluginLoader 提供对 Qt 插件的访问。 Qt 插件存储在共享库(DLL)中。

插件必须从纯虚拟类(和Q_DECLARE_INTERFACE)和QObject 继承。

我想用python和PyQt创建插件。 这可能不需要太多工作吗? 例如,如果我必须使用 boost::python 将模块转换为 C++,这可能是无稽之谈,因为 PyQt 已经是从 C++ 到 Python 的转换...

谢谢!

编辑: 我查看了有关插件的 pyqt 文档:http://www.riverbankcomputing.co.uk/static/Docs/PyQt4/pyqt4ref.html#writing-qt-designer-plugins

PyQT 有一个特定的类 QPyDesignerCustomWidgetPlugin 用于 qt 设计器插件。 但是这个类在QtDesigner.pyd模块中,所以我看不到代码来复制相同的架构。

编辑2:http://www.boddie.org.uk/david/Projects/Python/Qt/ 文件 pyqt4-embedded-examples-2008-02-13.tar.gz 包含在 C++ 中集成 PyQt Widget 的代码示例。但是你不使用 QPluginLoader 并且必须在你的 C++ 主代码中集成 python 解释器头文件。

再次感谢

【问题讨论】:

【参考方案1】:

嗯,我认为没有太多工作是不可能的。如果您在 PyQt 中编写模块,您可能必须将整个 Python 解释器添加到您的可执行文件中才能解释这些模块。即使您将这些模块翻译成 C++,翻译后的函数也必须在某些时候调用 Python API,从而引入对 Python 本身的依赖。

【讨论】:

确实,我看到 pythonplugin.dll PyQt4\plugins\designer 意味着有一种方法可以将 python 代码集成为设计器插件。但我不知道。谢谢 pythonplugin.dll 是 PyQt4 的一部分,而不是 Qt4。实际上,它允许您在 Qt Designer 中使用基于 Python 的插件,但它也回调 Python 以解释这些模块。如果您将pythonplugin.dll 加载到Dependency Walker 中(请参阅dependencywalker.com),您将看到它依赖于Python。

以上是关于QPluginLoader 与 PyQt 模块作为插件:可能吗?的主要内容,如果未能解决你的问题,请参考以下文章

pyqt 与 Anaconda 一起安装时找不到 PyQt5.QtWidgets 模块

无法导入 PyQt5 模块

处理 QPluginLoader::load() 抛出的异常

将 Qt 4.8 转换为 5 QPluginLoader->instance 返回 null

无法在 python 中导入模块:PyQt4 与 SIP 冲突

Qt DLL总结-VS2008+Qt 使用QPluginLoader访问DLL