2010-10-06 8 views
0

J'ai un QListWidget dans mon application PyQt4. Il contient des chemins de dossiers. Je veux enregistrer son contenu dans QSettings et le charger plus tard. Je utilisé ce code pour faire ceci:Comment sauvegarder et charger le contenu QListWidjet de/vers QSetting avec PyQt4?

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 

Mais si je fais pour que les dossiers chemins sont stockés dans le fichier de configuration comme:

musicfolders={0: PyQt4.QtCore.QString(u'/home/sam/Ubuntu One')} 

donc je ne sais pas comment les charger ensuite. J'ai tryed quelque chose comme ceci dans différentes variantes:

def foldersLoad(self): 
    folders = eval(self.tunSettings.value('musicfolders').toString()) 

Il renvoie l'erreur:

TypeError: eval() arg 1 must be a string or code object 

On dirait que j'ai juste besoin d'enregistrer les données d'une autre manière alors je le fais maintenant. Beaucoup d'eau, mais n'ont aucune idée. Je suis sûr que la réponse est triviale, mais je suis coincé.

Répondre

0

La solution est très simple. Je devais utiliser 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 

et charger

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())