如何使用PyQt4将QListWidget内容保存到QSetting或从中加载?
我在我的PyQt4应用程序中有一个QListWidget,里面存放着文件夹的路径。我想把这些内容保存到QSettings中,以后再加载出来。我用下面的代码来实现这个功能:
def foldersSave(self):
folders = {} '''create dict to store data'''
foldersnum = self.configDialog.FolderLIST.count() '''get number of items'''
if foldersnum:
for i in range(foldersnum):
folders[i] = self.configDialog.FolderLIST.item(i).text() '''save items text to dict'''
return str(folders) '''return string of folders to store in QSettings'''
return None
但是如果我把文件夹路径存储在配置文件中,像这样:
musicfolders={0: PyQt4.QtCore.QString(u'/home/sam/Ubuntu One')}
那么我就不知道该怎么加载它们了。我尝试过不同的方式,像这样:
def foldersLoad(self):
folders = eval(self.tunSettings.value('musicfolders').toString())
但是它返回了错误:
TypeError: eval() arg 1 must be a string or code object
看起来我需要用其他方式来保存数据,而不是现在这样。我搜索了很多,但还是没有头绪。我相信答案很简单,但我卡住了。
1 个回答
0
这个解决方案其实很简单。我会使用QStringList。
def foldersSave(self):
folders = QtCore.QStringList()
foldersnum = self.configDialog.FolderLIST.count()
if foldersnum:
for i in range(foldersnum):
print (i, " position is saved: ", self.configDialog.FolderLIST.item(i).text())
folders.append(self.configDialog.FolderLIST.item(i).text())
return folders
return None
然后加载
def foldersLoad(self):
folders = QtCore.QStringList()
folders = self.tunSettings.value('musicfolders', None).toStringList()
if folders.count():
foldersnum = folders.count()
for i in range(foldersnum):
self.configDialog.FolderLIST.addItem(folders.takeFirst())