Russian Qt Forum

Qt => Вопросы новичков => Тема начата: sektor от Январь 19, 2016, 08:50



Название: QSettings сохранение настроек для нескольких объектов.
Отправлено: sektor от Январь 19, 2016, 08:50
Допустим у меня есть класс, который сохраняет и после запуска восстанавливает некие настройки программы. Я подключаю этот класс в основной программе и создаю несколько объектов на этот класс. Вопрос : Каждый объект будет сохранять свои настройки в отдельные файлы? При загрузке объекты восстановят свои параметры с файлов?


Название: Re: QSettings сохранение настроек для нескольких объектов.
Отправлено: gil9red от Январь 19, 2016, 09:13
Мне кажется, у того класса название файла настроек задано по умолчанию (например, settings.ini или conf.ini) и если явно не менять название файла настроек у объектов того класса, то они все сохранят в один файл

Например, вы можете сами сделать сохранение / восстановление настроек при закрытии / открытии программы

В конструкторе класса главного окна вызываю read_settings, в обработчике события closeEvent вызываю write_settings
Код
Python
 
   def read_settings(self):
       # TODO: при сложных настройках, лучше перейти на json или yaml
       config = QSettings(CONFIG_FILE, QSettings.IniFormat)
       self.restoreState(config.value('MainWindow_State'))
       self.restoreGeometry(config.value('MainWindow_Geometry'))
 
   def write_settings(self):
       config = QSettings(CONFIG_FILE, QSettings.IniFormat)
       config.setValue('MainWindow_State', self.saveState())
       config.setValue('MainWindow_Geometry', self.saveGeometry())
 
   def closeEvent(self, *args, **kwargs):
       self.write_settings()
       super().closeEvent(*args, **kwargs)
 


Название: Re: QSettings сохранение настроек для нескольких объектов.
Отправлено: sektor от Январь 19, 2016, 09:27
Допустим он сохраняет в один файл. Но у меня 10 объектов одного класса, который при закрытии приложения сохраняет настройки при запуске загружает. Значение переменных каждого объекта разные. Допустим я закрыл программу и все сохранилось. При повторном запуске значение переменных для каждого объекты будут восстановлены?


Название: Re: QSettings сохранение настроек для нескольких объектов.
Отправлено: Bepec от Январь 19, 2016, 10:02
Сериализация однотипных классов делается самому ручками - просто создаёте разделы для каждого класса.
Если же работать как обычно, будет сохранены настройки одного класса.

Т.е. вам нужен менеджер/и/или разные названия каждого новосозданного класса, по которым и будет происходить разделение.

Псевдокод:
Код:
class data;
QList<data*> listData;
void writeSetting()
{
QSettings settings;
for (int i = 0; i < listData.size(); i++)
{
    settings.beginGroup("data№" + QString::number(i));
    settings.setValue('state', listData[i].state());
    settings.endGroup();
}
}

PS хотя можно сделать менеджер который будет собирать настройки, сериализовать их в байткод/xml/json и записывать одной строкой в settings.


Название: Re: QSettings сохранение настроек для нескольких объектов.
Отправлено: sektor от Январь 19, 2016, 11:32
Спасибо за пример. Все прояснилось.