Russian Qt Forum
Ноябрь 24, 2024, 03:33 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: QSettings сохранение настроек для нескольких объектов.  (Прочитано 4698 раз)
sektor
Самовар
**
Offline Offline

Сообщений: 100


Просмотр профиля
« : Январь 19, 2016, 08:50 »

Допустим у меня есть класс, который сохраняет и после запуска восстанавливает некие настройки программы. Я подключаю этот класс в основной программе и создаю несколько объектов на этот класс. Вопрос : Каждый объект будет сохранять свои настройки в отдельные файлы? При загрузке объекты восстановят свои параметры с файлов?
Записан
gil9red
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1805



Просмотр профиля WWW
« Ответ #1 : Январь 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)
 
Записан

sektor
Самовар
**
Offline Offline

Сообщений: 100


Просмотр профиля
« Ответ #2 : Январь 19, 2016, 09:27 »

Допустим он сохраняет в один файл. Но у меня 10 объектов одного класса, который при закрытии приложения сохраняет настройки при запуске загружает. Значение переменных каждого объекта разные. Допустим я закрыл программу и все сохранилось. При повторном запуске значение переменных для каждого объекты будут восстановлены?
Записан
Bepec
Гость
« Ответ #3 : Январь 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.
Записан
sektor
Самовар
**
Offline Offline

Сообщений: 100


Просмотр профиля
« Ответ #4 : Январь 19, 2016, 11:32 »

Спасибо за пример. Все прояснилось.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.138 секунд. Запросов: 22.