2012-12-05 4 views
3

Je me rends compte que cela semble horriblement redondant, puisque le pickle et QSettings réalisent fondamentalement la même chose, mais laissez-moi vous expliquer.Est-il possible de décaper un objet QSettings?

J'ai un programme composé de widgets qui peuvent être ancrés, redimensionnés ou modifiés. L'utilisateur souhaite pouvoir enregistrer différents états en tant que mises en page et changer entre ces dispositions. La mise en page est enregistrée en tant que fichier QSettings.

Pour enregistrer une liste de mises en page, je souhaite prendre un dictionnaire au format {'layoutName':qSettingsFile, 'anotherName':anotherFile}, mais lorsque j'essaie de prendre un fichier QSettings, j'obtiens TypeError: the sip.wrapper type cannot be instantiated or sub-classed.

Existe-t-il un moyen de faire fonctionner cela? Je pourrais simplement mettre le contenu du fichier QSettings dans le dictionnaire et oublier QSettings, mais j'espère un moyen plus facile/plus court.

+0

Je suis parti avec travailler le contenu du fichier dans le dictionnaire pour le moment. Il s'avère que ce n'était pas aussi mauvais que je pensais que ce serait. –

Répondre

4

Utilisez un fichier de paramètres et créez des groupes distincts pour chaque mise en page.

Le QSettings syntax prend en charge les clés hiérarchiques, donc il suffit d'utiliser beginGroup et endGroup pour créer nommées sections de mise en page:

settings.beginGroup('layouts') 
settings.beginGroup('layoutname1') 
# set various layout values... 
settings.endGroup() 
settings.beginGroup('layoutname2') 
# set various layout values... 
settings.endGroup() 
settings.endGroup() 

Ce qui génèrerait un fichier qui ressemble à ceci:

layouts/layoutname1/value1=true 
layouts/layoutname1/value2=true 
... 
layouts/layoutname2/value1=false 
layouts/layoutname2/value2=false 
... 

Alternativement, vous pouvez utiliser QSettings arrays pour créer une liste de mises en page indexée.

+0

Bonne réponse! Malheureusement, cela ne fonctionnera pas dans ma situation en raison du code existant, mais dans des circonstances normales ce serait parfait, donc je le corrige comme correct. –

+0

Vous voulez également ajouter l'avantage supplémentaire de coller avec une seule approche «QSettings» plutôt que d'écrire votre propre pickle, c'est de choisir l'emplacement et le format de préférences spécifiques à la plate-forme. Sous OSX, par exemple, il écrit les fichiers plist dans l'emplacement de l'utilisateur préféré. – jdi

Questions connexes