QSettings est une abstraction multi-plateforme qui peut être utilisé pour enregistrer les préférences, donc j'espère que cela évite l'utilisation de #IFDEFs
J'ai également constaté qu'il a vraiment de bonnes performances. Tellement bon, en fait, que je viens d'installer un écouteur d'événements et appelé save()
sur chaque événement unique.
classe contient un filtre d'événement de la forme comme ceci:
def __init__(self, *args, **kwargs):
# ....
self.installEventFilter(self)
# ....
def eventFilter(self, obj, event):
self.save()
return False
Et ma méthode save()
ressemble à ceci:
self.app.settings.setValue(self.state_key, self.header.saveState())
self.app.settings.setValue(self.geometry_key, self.header.saveGeometry())
self.app.settings.setValue("connect_timeout_spinBox_value", self.connect_timeout_spinBox.value())
self.app.settings.setValue("reveal_downloads_checkbox_checked", self.reveal_downloads_checkbox.checkState())
Alors, oui, vous avez à faire une jambe-travail vous-même pour obtenir vos prefs sauvés immédiatement - mais je ne l'ai pas trouvé trop pénible.
Et bien qu'il se sente (encore) un peu gêné de pulvériser save() à chaque événement, les bonnes performances ont rendu cette opération indétectable pour l'utilisateur.
Écrire une petite classe qui énumère chaque widget sur un formulaire et enregistre/restaure chacune de ses propriétés dans QSettings
serait également soigné. Cela peut être approprié si vous avez quelques dizaines/centaines de préférences. Je posterai ici quand je l'aurai fait.