QSettings - это кроссплатформенная абстракция, которую можно использовать для сохранения настроек, так что, надеемся, что это исключит использование #IFDEFs
Я также обнаружил, что у него действительно хорошая производительность. Настолько хорошо, что я просто установил прослушиватель событий и вызывал save()
для каждого отдельного события.
Класс формы содержит фильтр событий, подобный этому:
def __init__(self, *args, **kwargs):
# ....
self.installEventFilter(self)
# ....
def eventFilter(self, obj, event):
self.save()
return False
И мой save()
метод выглядит так:
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())
Так что, да, вы должны сделать некоторую самостоятельную работу, чтобы немедленно сохранить ваши префы - но я не нашел это слишком утомительным.
И хотя (все еще) он чувствует себя немного не в своей тарелке, чтобы выдавать save () на каждое событие, QSettings
отличная производительность сделала эту операцию незаметной для пользователя.
Написание небольшого класса, который перечисляет каждый виджет в форме и сохраняет / восстанавливает каждое из его свойств в QSettings
, также было бы неплохо. Это может быть уместно, если у вас есть несколько десятков / сотен предпочтений. Я отправлю сюда, когда я это сделаю.