2017-06-01 8 views
1

私はC++クラスmyClassを持っており、numpy配列に基づいて作成者を作ろうとしています。numpyオブジェクトをpythonqtラッパーに渡す

class myClassPyWrapper : public QObject { 
    Q_OBJECT 

public slots: 
/*... many other creators here ...*/ 
    myClass* new_myClass(PyObject* my_py_obj){ 
     if (PyArray_Check(my_py_obj)) { 
      //do something 
     } 
     return nullptr; 
    } 
} 

しかし、作成者が呼び出されません。また、Pythonの中から、私が入力したときに:ここで

は、引数としてPyObjectを取っnew_ Pythonのクリエイターを定義するラッパーです

a=np.array(np.zeros(100)).reshape(10,10) 
b=myClass(a) 

私が手:

py> a=np.array(np.zeros(100)).reshape(10,10) 
py> b=myClass(a) 
Traceback (most recent call last): 
    File "<string>", line 1, in <module> 
ValueError: Could not find matching overload for given arguments: 
(array([[ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.], 
     [ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.], 
     [ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.], 
     [ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.], 
     [ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.], 
     [ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.], 
     [ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.], 
     [ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.], 
     [ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.], 
     [ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.]]),) 
The following slots are available: 
myClass() -> myClass 
myClass(PyObject my_py_obj) -> myClass 
myClass(myClass) -> myClass 
myClass(int, int) -> myClass 
myClass(int, int, double val) -> myClass 
myClass(int, int, double val, QString name) -> myClass 
myClass(QVector<double>, QPair<int,int>) -> myClass 

Pyobject*PyArrayObject*が同じエラーが発生します。

他のすべての作成者が動作します。

私には何が欠けていますか?

私はここで私がPythonQtの開発者に対しから直接得た答えは、ケースに誰かが同じ問題GET、POST
+0

文字列のような単純なPythonオブジェクトを渡すことができますか?それはあなたの機能を呼び出すか、それともそれが一致しないと主張しますか?それは、システムがPyObjectを望んでいるように見えますが、 '*'というポインタはうまくいきません。 –

答えて

0

を短い答えは方法がnullptrを返していましたし、Qtのメタシステムは、私がやる(ない検出されたということですが方法を知っている)、メソッドを呼び出さなかった。

return nullptrを汎用コンストラクタ(たとえばreturn new myClass())に置き換えると、この問題が解決されます。

関連する問題