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 模块
处理 QPluginLoader::load() 抛出的异常
将 Qt 4.8 转换为 5 QPluginLoader->instance 返回 null