[PyKDE] Method returning a QObject instance instead of QHeader

Bruno da Silva de Oliveira bruno at esss.com.br
Thu Jan 13 12:40:50 GMT 2005



Jim Bublitz wrote:

>On Wednesday 12 January 2005 12:47, Bruno da Silva de Oliveira wrote:
>
>>I'm having a problem that I hope someone can provide an answer.
>>
>
>>I'm subclassing QTable, and I install an event filter in its vertical
>>QHeader instance. When I catch a mouse double click event inside the
>>event filter, destined to the header, any calls inside the event filter
>>to the QTable's method verticalHeader() returns an instance of QObject,
>>instead of QHeader.
>>
>
>>Attached is a simple example (40 lines) that demonstrates the problem.
>>Note that calling verticalHeader() in __init__() returns a QHeader
>>object as expected, but when called from inside the eventFilter() method
>>it returns a QObject instance.
>>
>
>>I tried to force the QObject returned from verticalHeader() to become a
>>QHeader by using calls to sip.unwrapinstance/sip.wrapinstance (as shown
>>in the code), but without success.
>>
>
>>Anyone has any idea of what the problem may be? Any workarounds?
>>
>
>The workarounds are fairly easy: in your example, in __init__ change header to 
>self.header (or use self.vertHeader and self.horizHeader) so that you don't 
>need to get the header object in the eventFilter; alternatively, the 'obj' 
>argument passed in to eventFilter is correctly typed as QHeader. You can use 
>QHeader.orientation() to determine which header triggered the eventFilter 
>call.
>
>Qt doesn't allow you to set the headers to arbitrary objects, so it appears 
>event filters are the only method available (the clicked() signal doesn't 
>look capable of differentiating between single- and double-clicks easily).
>
>The QTable.verticalHeader () call simply returns (QHeader*)QTable.leftHeader. 
>The type of leftHeader (private) is QTableHeader.  QTableHeader is internal 
>to QTable (I believe it's declared in the qtable.cpp), so it isn't possible 
>to do a sip binding for QTableHeader itself and sip is unaware of that type. 
>I would guess something in that construction is causing problems for sip's 
>"typecasting" code, but I don't know why it works in __init__ and not 
>eventFilter (and why obj is correctly typed). 
>
>Phil, of course, knows the answer.
>
>Jim
>

Hi,

Thanks for the answer. I posted the message mostly because I thought it 
was a bug in sip or PyQt.

Best Regards,

-- 
Bruno da Silva de Oliveira
bruno at esss.com.br
ESSS - Engineering Simulation and Scientific Software
http://www.esss.com.br




More information about the PyQt mailing list