Come salvare e caricare QListWidjet contenuti da / per QImpostazione con PyQt4?
-
28-09-2019 - |
Domanda
Ho una QListWidget nel mio PyQt4 app. Esso contiene i percorsi delle cartelle. Voglio salvare il suo contenuto QSettings e caricarle successivamente. Ho usato questo codice per fare questo:
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
Ma se faccio così i percorsi delle cartelle sono memorizzati nel file di configurazione come:
musicfolders={0: PyQt4.QtCore.QString(u'/home/sam/Ubuntu One')}
Quindi non ho idea di come caricare loro poi. Ho provato qualcosa di simile in diverse varianti:
def foldersLoad(self):
folders = eval(self.tunSettings.value('musicfolders').toString())
Si restituisce l'errore:
TypeError: eval() arg 1 must be a string or code object
Sembra che ho solo bisogno di salvare i dati in qualche altro modo, allora che faccio ora. Gooled un sacco, ma non hanno alcun indizio. Sono sicuro che la risposta è banale, ma mi sono bloccato.
Soluzione
La soluzione è molto semplice. Dovessi usare 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
e carico
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())
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow