Pregunta

Tengo un QListWidget en mi PyQt4 aplicación. Contiene carpetas caminos. Quiero salvar a su contenido a QSettings y cargarlos más tarde. He utilizado este código para hacer esto:

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

Pero si hago lo que carpetas caminos se almacenan en el archivo de configuración como:

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

Así que no tengo idea de cómo cargarlos a continuación. He tryed algo como esto en diferentes variantes:

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

Se devuelve el error:

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

Parece que sólo hay que guardar los datos de alguna otra manera, entonces lo hago ahora. Gooled mucho, pero no tienen idea. Estoy seguro que la respuesta es trivial, pero estoy atascado.

¿Fue útil?

Solución

La solución es muy simple. Tuviera que utilizar 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

y la carga

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())
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top