QSettings value type=int: big positive numbers converted in negative numbers

Gottfried Müller gottfried.mueller at gmx.de
Wed Apr 17 08:15:27 BST 2024


Thank you for the answers. I checked both solutions (omit the type
argument and the type='qint64'). The note of "not safe" was the argument
against the qint64 solution.

Gottfried


Am 16.04.24 um 16:48 schrieb Baz Walter:
> On 16/04/2024 11:23, Gottfried Müller wrote:
>> Hello,
>>
>> reading an integer value with a huge value (for example: 2845924041) is
>> converted in a negative value (-1449043255) using
>>
>> settings.value("bigInteger", type=int)
>>
>> As a workaround I read this value with type=str and convert it in the
>> Python code to an integer value. Is there a way getting the right
>> positive value by settings.value?
>
>
> The type argument can be a string representing one of the Qt basic types:
>
>     https://doc.qt.io/qt-6/qttypes.html
>
> These are guaranteed to be the same size on all platforms, so you
> could do:
>
>     settings.value("bigInteger", type="quint64")
>
> ... just so long as your values are never larger than 2 ** 64 - 1 (or
> 2 ** 63 -1 for signed integers).
>
>
> Note that it's *not safe* to omit the type argument, because on some
> platforms integer values will always be returned as strings (i.e. the
> original type information isn't preserved). In addition, integer
> values greater than 2 ** 64 - 1 may be serialised using a special
> @Variant syntax (or at least they will be when using INI files - I'm
> not sure about the other formats). For these values, the type argument
> *must* be omitted, because PyQt writes them using a custom PyObject
> meta-type (i.e. if anything other than type=object is specified, a
> TypeError will be raised).
>


More information about the PyQt mailing list