[PyQt] Small problem storing a list in QSettings

Detlev Offenbach detlev at die-offenbachs.de
Sun Sep 4 17:09:40 BST 2011


Am Sonntag, 4. September 2011, 17:25:56 schrieb Andreas Pakulat:
> On 02.09.11 16:12:49, Phil Thompson wrote:
> > On Thu, 1 Sep 2011 23:04:06 +0200, Andreas Pakulat <apaku at gmx.de> wrote:
> > > Hi,
> > > 
> > > I'm facing a small problem with QSettings and storing a python list
> > > in
> > > it. It seems that I can't store an empty list properly into a
> > > QSettings
> > > object, its always converted to an invalid QVariant somewhere along
> > > the
> > > way. The attached sample script shows this, all is well until I
> > > create a new QSettings object from the file and try to get the list
> > > again. The printout of the ini file also shows this.
> > > 
> > > Specifying the type for the value() call does not work, that raises
> > > an
> > > error that the conversion of the QVariant does not work due to
> > > different typeids (0 vs.  256).
> > > 
> > > Am I doing something wrong or do I really need to serialize the list
> > > manually into a string? (Can't even use QStringList here since thats
> > > not available with the v2 API).
> > > 
> > > sip: 4.12.1
> > > PyQt: 4.8.3
> > > Qt: 4.7.3
> > 
> > The problem with specifying an explicit type should be fixed in
> > tonight's
> > snapshot.
> 
> Ok, but what about the @Invalid being stored if I give
> QSettings.setValue an empty list as value? Is that expected?

In eric5 I had to deal with that issue as well. I solved it by writing a 
utility method like that.

def toList(value):
    """
    Module function to convert a value to a list.
    
    @param value value to be converted
    @return converted data
    """
    if value is None:
        return []
    elif not isinstance(value, list):
        return [value]
    else:
        return value

At that time I didn't find a better solution and it works well for quite some 
time now.

Regards,
Detlev
-- 
Detlev Offenbach
detlev at die-offenbachs.de


More information about the PyQt mailing list