我有一个C 类myClass
,我正在尝试基于numpy数组的创建者。
这是定义new_
Python创建者PyObject
作为参数的包装器:
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中。
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
我通过用PyArrayObject*
替换Pyobject*
尝试了,但我遇到了相同的错误。
每个其他创作者都可以。
我缺少什么?
我在这里发布了我直接从pythonqt developper获得的答案,以防有人遇到相同的问题:
简短的答案是该方法正在返回nullptr
,并且QT Metasystem正在检测(我不知道如何(,并且没有调用该方法。
通过用通用概念替换return nullptr
(例如return new myClass()
(解决了问题。