我正在使用Qt-Application,我使用Swig为我的公共API生成Python绑定。
我尝试在SWIG中实现信号/插槽,并将python嵌入到我的最终应用程序中。最后,它总是归结为一个简单的功能,SWIG似乎错过了或者我还没有找到它:
PyObject* createPyObject(QString typeName, bool passOwnership, void* obj)
该函数应该从传递的obj
创建一个PyObject。 typeName
是obj
指向的实例的类型,passOwnership
指定对象是否应该由Python解释器拥有。该功能应该:
我们说我有三个班级:
class A1
我有 out -Typemap从此类的实例转换为 Python-Integers 。class A2
我有 out -Typemap从此类的实例转换为 Python-Tuples 。class B
class C
,SWIG完全不知道。然后createPyObject
应该
PyIntObject*
createPyObj("A1",true,new A1())
PyTupleObject*
createPyObj("A2",true,new A2())
proxy of <Swig Object of Type 'B*'>
createPyObj("B",true,new B())
Swig Object of Type 'C*'
createPyObj("C",true,new C())
总结一下: 我希望返回的PyObject的构造就好像它是一个使用SWIG接口文件包装的函数的返回值。
PyObject* createPyObject(QString typeName, bool passOwnership, void* obj) {
typeName += " *"; //Pointer symbol
swig_type_info* info = SWIG_TypeQuery(typeName.toStdString().c_str());
if (info == nullptr) return nullptr;
return SWIG_NewPointerObj(obj, info, passOwnership ? SWIG_POINTER_OWN : 0);
}
这适用于不需要类型映射且SWIG已知的类型(需求中的第2点)。但它不适用于需要类型图的类型。
您能否为我提供createPyObject
的正确实施?我的意思是说,符合上面列出的所有要求。