Function PythonQt如何重写虚拟函数

Function PythonQt如何重写虚拟函数,function,overriding,virtual,wrapper,python-c-api,Function,Overriding,Virtual,Wrapper,Python C Api,我正在尝试将Python脚本功能添加到我的Qt应用程序中。到目前为止,我已经能够为许多类编写包装器。但是,一个类有一个虚拟的“init()”函数,必要时可以由派生类重写该函数 // C++ class class MyClass : public QObject { Q_OBJECT public: MyClass() { init(); // perform user initialization } virtual void init() {} }; MyCl

我正在尝试将Python脚本功能添加到我的Qt应用程序中。到目前为止,我已经能够为许多类编写包装器。但是,一个类有一个虚拟的“init()”函数,必要时可以由派生类重写该函数

// C++ class 
class MyClass : public QObject
{
 Q_OBJECT
 public:
  MyClass() 
  {
   init(); // perform user initialization
  }
  virtual void init() {}
};
MyClass构造函数调用虚拟函数“init()”。当MyClass是子类时,如果需要提供用户初始化,可以重写init函数

我希望在PythonQt中使用“MyClass”,因此我编写了一个包装类:

class MyClass_Wrapper : public QObject
{
 Q_OBJECT
public Q_SLOTS:
 // add a constructor
 MyClass* new_MyClass() {return new MyClass(); }
 void init(MyClass* mc) { mc->init(); }
};
类“MyClass”现在已在PythonQt中注册:

    PythonQt::self()->registerCPPClass("MyClass",NULL,"myModule", PythonQtCreateObject<MyClass_Wrapper>);

问题是print语句(以及下面的代码)从未执行过。PythonQt代码未重写init()函数

解决方案是使用PythonQt gerator应用程序创建包装器。这里有更多关于这方面的信息:
import myModule
Class TestClass(MyClass) :
  def init(self):
  # init() is called exactly once at the beginning to do
  # any necessary configuration.
  print "Inside init(self)"
  .
  .
  .
  return