PythonQt如何覆盖虚函数

时间:2015-09-18 17:11:37

标签: function override 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() {}
};

MyClass构造函数调用虚函数' init()'。当MyClass被子类化时,如果需要提供用户初始化,则可以覆盖init函数。

我希望使用' MyClass'在PythonQt中,所以我编写了一个包装类:

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>);

现在,我创建了一个Python脚本来使用&#39; MyClass&#39;:

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

问题是print语句(和以下代码)永远不会执行。 PythonQt代码不会覆盖init()函数。

0 个答案:

没有答案