将numpy对象传递到Pythonqt包装器



我有一个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()(解决了问题。

最新更新