首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在QSettings中保存列表项

在QSettings中保存列表项
EN

Stack Overflow用户
提问于 2019-05-23 00:36:57
回答 1查看 0关注 0票数 0

我正在尝试使用保存列表QSettings,其中我将其编码如下:settings.setValue('ids', id_list)

但是,如果id_list中只有一个项目,当我重新启动我的代码时,要加载的设置将ids其捕获为字符串值而不是列表。

以下是我编码存储值的方式:

代码语言:javascript
复制
settings = QtCore.QSettings('MyTest', 'Itemize')
id_list = []
for item_id in item_list:
    id_list.append(item_id)
settings.setValue('ids', id_list)

当我试图将其重写为:

代码语言:javascript
复制
settings.value('ids', [], 'QStringList')

我收到一个错误:

代码语言:javascript
复制
TypeError: PySide2.QtCore.QSettings.value(): too many arguments # 
EN

回答 1

Stack Overflow用户

发布于 2019-05-23 10:13:59

QSettings :: value()只接受2个参数:键和默认值,如果键不存在则返回,因此第三个参数是不必要的,除了PySide2当前将所有Qt类型映射到本机类型的python,在QStringList的情况被映射为字符串列表,解决方案是:

代码语言:javascript
复制
from PySide2 import QtCore

settings = QtCore.QSettings('MyTest', 'Itemize')
id_list = []
item_list = [u'541e-fe83-430d-9428-8595', u'b569-e7bb-4a4d-a8f6-4ed0']
for item_id in item_list:
    id_list.append(item_id)
settings.setValue('ids', id_list)
r = settings.value('ids', [])
print(r)

输出:

代码语言:javascript
复制
['541e-fe83-430d-9428-8595', 'b569-e7bb-4a4d-a8f6-4ed0']

我的测试代码:

代码语言:javascript
复制
from PySide2 import QtCore

settings = QtCore.QSettings('MyTest', 'Itemize')
if settings.value('ids') is None:
    settings.setValue('ids', ['541e-fe83-430d-9428-8595', 'b569-e7bb-4a4d-a8f6-4ed0'])
else:
    print(settings.value('ids'))
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/-100006787

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档