[PyQt] Pointer Attribute

Jay L. jlaura at asu.edu
Wed Oct 26 05:32:15 BST 2016

Made a bit more progress I think.  The below is building but crashing when
trying to convert from the Python Obj to a SiftPoint.

The %GetCode returns what I am expecting - a Python list of SiftPoint
objects.  The SiftPoint has been wrapped.  The %SetCode is seg. faulting on

Within the %GetCode, I do not believe I have access to sipTransferObj or

Two questions:

1) Is this the intended use of %GetCode and %SetCode?  Should I be using
another directive?

2) In the SetCode block, how does one go about converting a list of class
instances into a C++ pointer?  Is this code heading down the right path?


    SiftPoint *h_data
            size_t size = sipCpp->numPts;
            PyObject *l = PyList_New(sipCpp->numPts);
            for (size_t i = 0; i < size; ++i){
                SiftPoint *sp = new SiftPoint(sipCpp->h_data[i]);
                PyObject *p = sipConvertFromType((void*)(sp),
sipType_SiftPoint, NULL);
                PyList_SetItem(l, i, p);
            return l;

        size_t length = PyList_GET_SIZE(sipPy);

        for (int i=0; i < length; ++i){

        if (!sipCanConvertToType(PyList_GET_ITEM(sipPy, i),
                                 sipType_SiftPoint, SIP_NOT_NONE))
            return 0;

        printf("So far so good\n");
        sipCpp->numPts = length;

        // Set the length of the h_data
        SiftPoint h_data[length];
        sipCpp->h_data = h_data;

        for (size_t i=0; i < length; ++i){
            PyObject *sp  = PyList_GetItem(sipPy, i);

            SiftPoint *sif = reinterpret_cast<SiftPoint




NULL, 0));
            h_data[i] = *sif;

On Tue, Oct 25, 2016 at 6:32 AM, Jay L. <jlaura at asu.edu> wrote:

> Unfortunately, the sip error is non-specific.  It looks like what I
> actually need to use is %GetCode and %SetCode.
> Thanks!
> On Tue, Oct 25, 2016 at 12:56 AM, Phil Thompson <
> phil at riverbankcomputing.com> wrote:
>> On 24 Oct 2016, at 11:25 pm, Jay L. <jlaura at asu.edu> wrote:
>> >
>> > I have a class with an attribute that is a pointer:
>> >
>> > public:
>> >   SiftPoint *h_data
>> >
>> > I can write %MethodCode to expose a custom 'get_h_data()' method,  How
>> should I expose the attribute directly, e.g. my_py_class.h_data,
>> >
>> > I tried %MappedType, but am getting sip errors...
>> ...then fix the sip errors.
>> Phil
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://www.riverbankcomputing.com/pipermail/pyqt/attachments/20161025/6f5d34ec/attachment.html>

More information about the PyQt mailing list