For reference I am developing on Mac OS X v 10.3.4 using PyQt 3.12, sip 4.0.1, Mac Qt 3.2.3 and Python 2.3.4.
I have a class that is handed a QMouseEvent in the class' __init__ method where I obtained the mouse events position (a QPoint) by doing
self._start = event.pos()
then in a member method I make use of self._start. Unfortunately, the values returned from self._start.x() and self._start.y() that I get when called from the other member method are completely erroneous. However, If I change my __init__ method so I explicitly create a new QPoint, i.e.
self._start = QPoint( event.pos() )
then the values returned from self._start.x() (and .y()) are what they are supposed to be.
My conclusion is the underlying C++ object returned from the initial call to event.pos() is only correct during the scope of the __init__ call and has been deleted by the time I entry my other member method, even though I have a reference to the wrapping Python object.
Looking at the wrapping code for the QMouseEvent::pos() routine I find
const QPoint *sipRes;
sipRes = &sipCpp -> QMouseEvent::pos();
return sipMapCppToSelf(const_cast<QPoint *>(sipRes),sipClass_QPoint);
So the question is, is the address held by 'sipRes' the c++ object that ultimately gets held by the Python wrapping object? If so, then it is easy to see why that becomes a stale pointer (since the QPoint is 'deleted' when the QMouseEvent goes out of scope). If this is not the case, then there appears to be another problem with PyQt's C++ object handling.
Chris
_______________________________________________ PyKDE mailing list [EMAIL PROTECTED] http://mats.imk.fraunhofer.de/mailman/listinfo/pykde
