I am new to using SIP, and I find it *very* difficult to find reasonable documentation and examples to do what I need to do. I want to be able to have SIP automatically cast my instances to a subclass. I am using "%ConvertToSubClassCode" that uses dynamic_cast<> to figure out whether the sipCpp is my class, and if it is, then I convert it to the related sip class. Here is the snippet of my code:
~~~~~~~~~~~~~~~
class ChmMainWindow : ChmBaseView
{
%TypeHeaderCode
#include "chmmainwindow.h"
%End
%ConvertToSubClassCode
   ChmMainWindow *mw = dynamic_cast<ChmMainWindow *>(sipCpp);
   if (mw){
       sipClass = sipAPI_canvasapp->api_find_class("ChmMainWindow");
   } else {
       sipClass = NULL;
   }
%End
~~~~~~~~~~~~~~~
However, the compiler fails to recognize the "ChmMainWindow" class when compiling the sipcanvasappcmodule.cpp file because the %TypeHeaderCode does not get put into that file before this code. (i.e., this code only gets put into the actual SIP wrapper cpp file). My workaround is to put this "#include "chmmainwindow.h" into a different %TypeHeaderCode block further down the SIP file, and this seems to work fine (I am not sure why some %TypeHeaderCode blocks get put into the cmodule and some others do not).

Also, I am not sure why (forgive my ignorance) this isn't the default behavior? Why shouldn't subclasses implemented in SIP get converted by default? I see the Qt code implements all of the casting in one object (i.e., QApplication), is it a performance issue?

Thanks a lot for your response in advance.

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

Reply via email to