On 27/12/10 10:04, Phil Thompson wrote:
A typical backend will save values as a string without any metadata
describing the original type. In QVariant v1 the conversion back is done by
QVariant::toBool() which only checks for "true" and "false", so that is the
behaviour to be replicated in QVariant v2.

If this is a problem then I could add an optional keyword argument to
QSettings.value() that takes a Python type argument and will automatically
return a value of that type or raise an exception...

     b = settings.value(key, type=bool)

...or any other suggestions?

i expanded my previous test to include a few other types:

from PyQt4.QtCore import QSettings, QPoint

settings = QSettings('foo', 'foo')
settings.clear()
settings.beginGroup('section')
settings.setValue('bool', False)
print('bool = %s' % repr(settings.value('bool')))
settings.setValue('int', 42)
print('int = %s' % repr(settings.value('int')))
settings.setValue('point', QPoint(10, 20))
print('point = %s' % repr(settings.value('point')))
settings.setValue('list', [1, 2, 3])
print('list = %s' % repr(settings.value('list')))
settings.endGroup()

# re-sync with storage
settings = QSettings('foo', 'foo')
settings.beginGroup('section')
print('bool = %s' % repr(settings.value('bool')))
print('int = %s' % repr(settings.value('int')))
print('point = %s' % repr(settings.value('point')))
print('list = %s' % repr(settings.value('list')))
settings.endGroup()

output for linux, using python 3.1.3, qt 4.7.1, sip 4.11.2, pyqt 4.8.1:

$ python3 settings.py
bool = False
int = 42
point = PyQt4.QtCore.QPoint(10, 20)
list = [1, 2, 3]
bool = 'false'
int = '42'
point = PyQt4.QtCore.QPoint(10, 20)
list = ['1', '2', '3']

output for win xp, using python 3.1.3, qt 4.7.1, sip 4.12, pyqt 4.8.2:

c:\python31\python.exe settings.py
bool = 'false'
int = 42
point = PyQt4.QtCore.QPoint(10, 20)
list = ['1', '2', '3']
bool = 'false'
int = 42
point = PyQt4.QtCore.QPoint(10, 20)
list = ['1', '2', '3']

so it looks like portability *has* been compromised. there are differences between linux and windows both before and after a re-sync.

also, i think xavion may be right to suggest there is at least one other bug here. on linux, there is inconsistency between some values before and after a re-sync that is not present on windows.

(of course, it goes without saying that the easy way to avoid all these complications is to use the QVariant v1 api).


_______________________________________________
PyQt mailing list    PyQt@riverbankcomputing.com
http://www.riverbankcomputing.com/mailman/listinfo/pyqt

Reply via email to