如何使用PyQt4将QListWidget内容保存到QSetting或从中加载?

0 投票
1 回答
1075 浏览
提问于 2025-04-16 05:03

我在我的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())

撰写回答