C++ 在Python中使用自定义Qt子类

C++ 在Python中使用自定义Qt子类,c++,python,qt,swig,C++,Python,Qt,Swig,首先:我对Qt和SWIG都是新手。目前正在阅读这两方面的文档,但这是一项耗时的任务,所以我正在寻找一些破坏者。提前知道事情是否行不通是件好事 我正试图为一些内部软件制定一个模块化体系结构。核心组件是C++,通过SWIG到Python进行实验和新组件的快速原型化。Qt似乎有一些类我可以用来避免在这里过多地重新发明轮子,但我关心的是一些比特如何组合在一起 具体来说,如果我创建了一些C++类,我需要通过SWIG来公开它们。其中一些类可能是Qt类的子类,或者在它们的公共接口中公开了Qt内容。这似乎会引起

首先:我对Qt和SWIG都是新手。目前正在阅读这两方面的文档,但这是一项耗时的任务,所以我正在寻找一些破坏者。提前知道事情是否行不通是件好事

我正试图为一些内部软件制定一个模块化体系结构。核心组件是C++,通过SWIG到Python进行实验和新组件的快速原型化。Qt似乎有一些类我可以用来避免在这里过多地重新发明轮子,但我关心的是一些比特如何组合在一起

具体来说,如果我创建了一些C++类,我需要通过SWIG来公开它们。其中一些类可能是Qt类的子类,或者在它们的公共接口中公开了Qt内容。这似乎会引起一些复杂问题


Python中已经有两个Qt接口,PyQt和PySide。出于许可的原因,可能会使用PySide。让一个Qt类的SWIG包装的自定义子类很好地处理这两个类,我应该有多痛苦?我应该提前了解哪些复杂情况

> PyQt将C++代码通过Python公开;PySide通过。它们都具有与SWIG大致相同的功能(除了它们只支持“扩展到Python的C++”,而SWIG还支持Ruby、Perl、java等)。SWIG、SIP和Shiboken都不是为互操作而设计的。你不能方便地使用SWIG来使用QT所需要的C++扩展来包装任何代码(支持信号和时隙),我不知道在尝试互操作SIP包(或Sybink缠绕)和Sigg缠绕代码时会遇到什么危险。 为什么,我选择了两种独立的和等效的方式来包装C++代码库的不同部分(通过SIP或SHBOKEN QT,通过SWIG其他所有)?如果你仍然可以重新考虑这个奇怪的设计决定,我会真诚地建议你这样做


如果你选择的Sigg是用石头雕刻的,我预测任何时候你都用QT扩展(即时隙或信号)包装C++代码,而且对于所有涉及的人来说,都是一个非常痛苦的时间。如果您选择一种包装方式,并坚持下去,问题应该会大大减少。我对Shiboken没有任何实际经验(它有点太新了,我现在几乎不做GUI应用程序了……我的世界都是web应用程序!-),但过去在这个角色中使用过SIP(早在它被正式记录之前——在我看来,这些天它的记录非常出色,而对Shiboken的肤浅阅读也给了我同样的印象),我可以高度推荐它(事实上,如果我可以选择它,它可能比SWIG更可取,即使项目中没有涉及Qt代码).

谢谢,我想应该是这样的。SWIG出现在桌面上的主要原因是有不止一种目标语言。不过,这不一定是一个绊脚石,因为这些语言可能会被忽略,如果不是的话,我也有一些Python嵌入/桥接的经验。使用Qt作为baSIS(或根本)也不是一成不变的。@ KWATFED,QT是C++和Python GUI应用程序的极好基础(我确信它也必须是其他语言的,但这是我的真实体验的程度),但是混合更多的语言混合可能是一个问题(W/W/O SWIG)。事实上,我不确定我建议在C++中使用什么基础框架来与Python、露比和Perl混合在同一个应用程序中(听起来很可怕,但可能这只是因为我自己从来没有做过类似的事情)。Hah,我不是那么疯狂:)“不止一个目标语言”指的是框架的多套绑定,没有一款应用嵌入了多种语言。除了MATLAB——它目前没有SWIG模块,我已经为它建立了一个Python桥,我们有一堆遗留代码。。。不过,如果可能的话,我还是宁愿把那些东西留下。