[PyQt] SIP template

Phil Thompson phil at riverbankcomputing.com
Tue Aug 8 17:23:24 BST 2017


On 2 Aug 2017, at 9:21 am, Shaheed Haque <srhaque at theiet.org> wrote:
> 
> Hi,
> 
> On 18 May 2017 at 13:14, Denis Rouzaud <denis.rouzaud at gmail.com> wrote:
>> 
>> Sorry, for the noise.
>> 
>> I missed the second typedef in the ModuleHeaderCode, it works!
>> Thanks to David, Phil and Shaheed for the hints!
> 
> Is there a variation on this technique that works for nested classes?
> It turns out that in all 17 places this affects PyKF5 involve nested
> classes, and attempting to modify this SIP:
> 
> =============
> namespace KContacts
> {
>    class AddresseeList: QVector<KContacts::Addressee>
>    {
> =============
> 
> into this SIP:
> 
> =============
> namespace KContacts
> {
> %TypeHeaderCode
> typedef QVector<KContacts::Addressee> foo_t;
> %End
> typedef QVector<KContacts::Addressee> foo_t;
>    class AddresseeList: KContacts::foo_t
>    {
> =============
> 
> only results in:
> 
> sip: tmp/KContacts/KContacts/AddresseeList.sip:121: Super-class list
> contains an invalid type
> 
> I stared a the code that emits the message in parser.y (and also tried
> moving foo_t to global scope), without the solution becoming obvious.
> So, any clues or ideas welcomed!

PyQt has the same problem with QPolygon. The workaround is to say that AddresseeList does not have a super-class and to add any QVector methods you want to AddresseeList. See qpolygon.sip in PyQt.

Phil


More information about the PyQt mailing list