[PyQt] Calling subclass-overridden methods from C++

Alessandro Pasotti apasotti at gmail.com
Tue Oct 7 15:33:43 BST 2014


2014-10-07 16:29 GMT+02:00 Phil Thompson <phil at riverbankcomputing.com>:
> On 07/10/2014 3:24 pm, Alessandro Pasotti wrote:
>>
>> 2014-10-07 16:11 GMT+02:00 Phil Thompson <phil at riverbankcomputing.com>:
>>>
>>> On 07/10/2014 2:34 pm, Alessandro Pasotti wrote:
>>>>
>>>>
>>>> 2014-10-07 15:31 GMT+02:00 Alessandro Pasotti <apasotti at gmail.com>:
>>>>>
>>>>>
>>>>> Hi,
>>>>>
>>>>> I'm currently busy trying to add python plugins support to the server
>>>>> side of QGIS (http://www.qgis.org).
>>>>>
>>>>> Basically, I've written all the c++ part, and python plugins are
>>>>> successfully loaded and started, what I still don't understand is how
>>>>> to call from C++ code the Python overridden methods.
>>>>>
>>>>> In C++ I have a class QgsServerFilter with a default empty method for
>>>>> requestReady()
>>>>>
>>>>
>>>> Sorry: silly TAB in Gmail.
>>>>
>>>> In the Python plugin I do something like:
>>>>
>>>> class HelloServer(QgsServerFilter):
>>>>     def requestReady()
>>>>         pass
>>>>
>>>>
>>>> then I pass the HelloServer instance to C++ (stored into "filter") and
>>>> later on C++ calls:
>>>>
>>>> filter->requestReady()
>>>>
>>>> but instead of calling HelloServer->requestReady() the base (empty)
>>>> method is called.
>>>>
>>>> What am I doing wrong?
>>>
>>>
>>>
>>> Impossible to say with the information you have provided.
>>
>>
>> This is good news, it means that my approach wasn't completely wrong,
>> here some details:
>>
>> The relevant code can be found here (C++):
>>
>> The QgsServerFilter class:
>>
>> https://github.com/elpaso/QGIS/blob/serverplugins-iface/src/mapserver/qgsserverfilter.h
>>
>> main application C++ calls:
>>
>> https://github.com/elpaso/QGIS/blob/serverplugins-iface/src/mapserver/qgis_map_serv.cpp#L366
>>
>> and here (SIP):
>>
>> https://github.com/elpaso/QGIS/blob/serverplugins-iface/python/server/qgsserverfilter.sip
>>
>> The test plugin Python code is here:
>> https://dpaste.de/SOg6
>
>
> You can't override non-virtual functions.

Thanks a lot!

-- 
Alessandro Pasotti
w3:   www.itopen.it


More information about the PyQt mailing list