[PyQt] PyQt 5.7, QSqlQueryModel.data() sub-classed override bug?

Phil Thompson phil at riverbankcomputing.com
Thu May 3 18:01:56 BST 2018


On 3 May 2018, at 5:32 pm, J Barchan <jnbarchan at gmail.com> wrote:
> 
> ​​Very few contexts in Qt care about null QVariants - this may well be the only one.​​ (An invalid QVariant - which mapped to None - is much more common.)
> 
> Phil
> 
> ​Hi Phil,
> 
> Thanks, I knew about the return value from ​​sip.enableautoconversion(), I was going to put in your suggestion when I had a moment.
> 
> As you have shown it is not necessary in this case. However you would have problems for virtual re-implementations that are passed a QVariant as an argument rather than being passed back as a result.
> 
> I don't get this, or we are not quite talking the same language.  Until we spotted this issue, the Python override function was causing the wrong result to be returned.  We did have to do something in this case: we had to make a call to ​sip.enableautoconversion(QtCore.QVariant, False), which neither I nor anyone else would have known we were supposed to do here.

I disagree with that - although I'm not saying that the documentation couldn't be improved.

> I don't mind how we phrase it, but I just need to know what pattern I might need to look out for if I'm supposed to do similar somewhere else in Qt/PyQt?

Anywhere that a null QVariant has a specific meaning and is being passed as an argument to a virtual function.

> Very few contexts in Qt care about null QVariants - this may well be the only one.​ (An invalid QVariant - which mapped to None - is much more common.)
> 
> I'll take your word for it.  All I would say is that this seems to have come about because we are trying to handle the return of NULL from a database --- right?  Might there not be more functions among all the data-handling ones where this occurs?

By context I mean the QtSql module.

PyQt's behaviour is a compromise that works in 90+% of cases without having to use autoenableconversion(). Between us we have identified a case where using autoenableconversion() wouldn't solve the problem. However I'm not sure there is an example in Qt.

Phil


More information about the PyQt mailing list