[PyQt] Qt or PyQt problem?

Phil Thompson phil at riverbankcomputing.com
Thu Jun 4 15:27:33 BST 2009


On Thu, 04 Jun 2009 08:35:52 +0200, "V. Armando Solé" <sole at esrf.fr>
wrote:
> Phil Thompson wrote:
>> On Wed, 03 Jun 2009 22:57:32 +0200, Vicente Sole wrote:
>>   
>>> createIndex can accept a pointer or a quint32 so, in any case one  
>>> would say it is a positive number. Perhaps forcing the return of  
>>> internalId() to be a quint64 instead of qint64 in  
>>> qabstractitemmodel.sip could do the job, but then we would not be  
>>> respecting the (incorrect) Qt API.
>>>
>>> So, unless I get I successful test under 32-bit with Phil\'s patch, I  
>>> would just leave the things as they are.
>>>     
>>
>> Except that this keeps coming up.
>>
>> Does changing the type of internalId() from qint64 to quint64 solve the
>> problem (I don't have a 32 bit Linux system handy)?
>>   
> 
> No, it does not.
> 
> With your patch and changing the returned value of internalId() to 
> quint32 I got it working on 32-bit for both cases, that means, when 
> passing the object and when passing the address of the object. So, I 
> guess internalId() should return an unsigned int32 in a 32-bit platform 
> and an unsigned int64 in a 64-bit platform.
> 
> Changing qabstractitemmodel.sip from:
> 
> qint64 internalId() const;
> 
> to
> 
> unsigned long internalId() const;
> 
> gives correct results for the object case under the platforms I can test.
> 
> For the value case, it works under 32-bit but most likely will fail 
> under 64-bit when the written number cannot be represented by a 32-bit 
> integer.
> 
> I do not know if my "unsigned long" patch can have side effects on other 
> platforms. It makes sense that if one passes an object and the address 
> of the object is stored, one should get back an unsigned of the type the 
> machine is using  for addresses. I always thought it is  unsigned long, 
> but perhaps there are more exotic solutions around. Is it possible to 
> modify qabstractitemmodel.sip set the returned value as quint32 on 
> 32-bit platforms and quint64 on 64-bit platforms? That should solve the 
> issue I am finding without (hopefully) introducing new ones.

I've just uploaded a new snapshot which I hope will fix everything on all
platforms.

Phil


More information about the PyQt mailing list