Hello,

Recently I tried to compile QtiPlot (http://soft.proindependent.com/qtiplot.html), an application using SIP during building. At some stage of the compilation I got the following error:

sipqtiApplicationWindow.cpp: In function 'PyObject*
meth_ApplicationWindow_windows(PyObject*, PyObject*)':
sipqtiApplicationWindow.cpp:1144: error: 'MDIWindowList' was not
declared in this scope
sipqtiApplicationWindow.cpp:1144: error: 'sipRes' was not declared in
this scope
sipqtiApplicationWindow.cpp:1147: error: expected type-specifier before
'MDIWindowList'
sipqtiApplicationWindow.cpp:1147: error: expected `;' before 'MDIWindowList'
sipqtiApplicationWindow.cpp:1151: error: type '<type error>' argument
given to 'delete', expected pointer
make[1]: *** [../tmp/qtiplot/sipqtiApplicationWindow.o] Error 1

I started exploring the above file (sipqtiApplicationWindow.cpp) and found that the error was caused by the following fragment:

            MDIWindowList *sipRes;

            Py_BEGIN_ALLOW_THREADS
            sipRes = new MDIWindowList(sipCpp->windowsList());
            Py_END_ALLOW_THREADS

PyObject *sipResObj = sipConvertFromMappedType(sipRes,sipMappedType_QList_0201MdiSubWindow,NULL);
            delete sipRes;


But MDIWindowList type was never be defined. Although in the file qti.sip, from wich the pointed .cpp file was generated, the following line presented:

typedef QList<MdiSubWindow*> MDIWindowList;

Also, I remembered that earlier the compilation hadn't failed. I'd found that since that time SIP was updated from 4.7.6 nj 4.7.9. I proposed that this may cause the error and downgraded SIP back to 4.7.6. After that the compilation stopped failing. The errorneos fragment of the generated file sipqtiApplicationWindow.cpp changed to the following:

            QList<MdiSubWindow *> *sipRes;

            Py_BEGIN_ALLOW_THREADS
            sipRes = new QList<MdiSubWindow *>(sipCpp->windowsList());
            Py_END_ALLOW_THREADS

PyObject *sipResObj = sipConvertFromMappedType(sipRes,sipMappedType_QList_0201MdiSubWindow,NULL);
            delete sipRes;

            return sipResObj;

that is old SIP performed correct type placement.

So I now have a question, whether new SIP has a bug, or it's a feature and QtiPlot sources should be adopted for it (how?)? I'm a newbie with SIP and ask you for a help, please.

Regards,
Yury.
_______________________________________________
PyQt mailing list    [email protected]
http://www.riverbankcomputing.com/mailman/listinfo/pyqt

Reply via email to