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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Методы сохранения настроек  (Прочитано 8749 раз)
__Heaven__
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2130



Просмотр профиля
« : Июль 18, 2014, 10:40 »

Доброго времени суток!
Я решил задаться вопросом, как правильно работать с QSettings.
Имеются две функции saveSettings и loadSettings. В каждой я вручную прописываю, наименование параметра, который необходимо получить или сохранить. То есть, происходит некоторое дублирование имён параметров. Причём иногда могу опечататься и программа будет сохранять под одним именем, а запрашивать параметр под другим.

Сейчас есть идея создать какое-нибудь перечисление (enum {val1, val2}) и словарь над выше указанными функциями. А в самих функциях уже подставлять именно словарь(перечисление).
Таким образом и добавлять новые параметры, и редактировать старые будет эффективнее.

Хотел узнать мнения других участников. Как Вы работаете с настройками?
Записан
Swa
Самовар
**
Offline Offline

Сообщений: 170


Просмотр профиля
« Ответ #1 : Июль 18, 2014, 10:49 »

Зачем? Там же всё автоматически делается.
Вот как я работаю https://github.com/WalterSullivan/qNotesManager/blob/master/src/applicationsettings.cpp
Записан
Bepec
Гость
« Ответ #2 : Июль 18, 2014, 10:51 »

У меня лично работает система "не бей лежачего". Программулина небольшая парсит файл, выбирает из него переменные и я потом выбираю которые сериализовать Улыбающийся После выбора она тупо переписывает ф-ции save/loadSettings. Конечно она не совершенна, но мне хватает Улыбающийся

PS словарик хорошо, но что то мне в нём не нравится Веселый
Записан
__Heaven__
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2130



Просмотр профиля
« Ответ #3 : Июль 18, 2014, 11:02 »

Зачем? Там же всё автоматически делается.
Вот как я работаю https://github.com/WalterSullivan/qNotesManager/blob/master/src/applicationsettings.cpp

Я не понял, что именно делается автоматически. Мне почему-то очень не нравится это дублирование. Видимо из-за какого-нибудь возможного (см. код)
Код:
QPoint ApplicationSettings::GetWindowPos() const {
return settings->value("mainwindOw/pos", QPoint(0, 0)).toPoint();
}

void ApplicationSettings::SetWindowPos(const QPoint& p) {
settings->setValue("mainwind0w/pos", p);
}
Записан
Swa
Самовар
**
Offline Offline

Сообщений: 170


Просмотр профиля
« Ответ #4 : Июль 18, 2014, 11:05 »

Я не понял, что именно делается автоматически. Мне почему-то очень не нравится это дублирование. Видимо из-за какого-нибудь возможного (см. код)

Ну от такого не застрахован никто, тут ктрл+с, ктрл+в вам в помощь.
Записан
__Heaven__
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2130



Просмотр профиля
« Ответ #5 : Июль 18, 2014, 11:12 »

У меня лично работает система "не бей лежачего". Программулина небольшая парсит файл, выбирает из него переменные и я потом выбираю которые сериализовать Улыбающийся После выбора она тупо переписывает ф-ции save/loadSettings. Конечно она не совершенна, но мне хватает Улыбающийся

PS словарик хорошо, но что то мне в нём не нравится Веселый

В смысле, имеется некоторый файл с настройками, который превращается в код чтения/записи настроек?
В моём случае это не очень удобно будет, наверное.

Ну от такого не застрахован никто, тут ктрл+с, ктрл+в вам в помощь.
Да, именно так я и делаю. Но, когда у меня был проект с большим количеством настроек, меня это почему-то раздражало  В замешательстве . Видимо, потому что лень было крутить колёсико мыши туда-сюда. А с перечислением, особенно если его загнать в какой-нибудь namespace, мне кажется, что будет кодирование немного проще. Всплывающие подсказки сделают всё сами за тебя. И не нужно будет выводить код в два окна, прокручивать его часами. Но, быть может, я и ошибаюсь  Веселый
Записан
Bepec
Гость
« Ответ #6 : Июль 18, 2014, 11:17 »

Собственно нет никаких доп файлов. Там в комментариях напротив переменных устанавливается знак на выбор Улыбающийся
Аля
Код:
bool isComplete; //+

Но собственно в любом из иных способов придётся прописывать 2 функции руками. И Enum'ы и словарики чуть облегчат проблему, но не более того. Ручки всё равно устанут и вы сможете ошибиться в ключе словарика, или написать его два раза Веселый В общем никаких особых преимуществ Веселый
Записан
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4349



Просмотр профиля
« Ответ #7 : Июль 18, 2014, 11:23 »

Ручки всё равно устанут и вы сможете ошибиться в ключе словарика, или написать его два раза Веселый В общем никаких особых преимуществ Веселый
Что бы не ошибиться можно задать ключики через константы:
Код
C++ (Qt)
static const QString keyWindowPos = "window/pos";
static const QString keyWindowSize = "window/size";
 
и использовать их.
Тогда и ide будет помогать, а если все таки в написании ошибетесь, то и компилятор по рукам даст.
Записан
Bepec
Гость
« Ответ #8 : Июль 18, 2014, 11:52 »

Но тогда и добавление нового параметра превращается в головную боль - сделать константу, запилить её в 2 функции/или же добавить в словарь с ссылкой на переменную.
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4727



Просмотр профиля WWW
« Ответ #9 : Июль 18, 2014, 12:24 »

ключи словаря тоже надо делать константами по-хорошему
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
__Heaven__
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2130



Просмотр профиля
« Ответ #10 : Июль 18, 2014, 12:43 »

Что бы не ошибиться можно задать ключики через константы:
Код
C++ (Qt)
static const QString keyWindowPos = "window/pos";
static const QString keyWindowSize = "window/size";
 
и использовать их.
Тогда и ide будет помогать, а если все таки в написании ошибетесь, то и компилятор по рукам даст.

Тоже интересный вариант, мне кажется
Записан
__Heaven__
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2130



Просмотр профиля
« Ответ #11 : Июль 18, 2014, 12:45 »

Но тогда и добавление нового параметра превращается в головную боль - сделать константу, запилить её в 2 функции/или же добавить в словарь с ссылкой на переменную.
Я придумал словарь использовать ещё и потому, что можно прикрутить ещё один словарь, который будет указывать, как обрабатывать переменную, чтобы в функциях save/load обрабатывать параметры тупо в цикле  Показает язык
« Последнее редактирование: Июль 18, 2014, 13:07 от __Heaven__ » Записан
Alex Custov
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2063


Просмотр профиля
« Ответ #12 : Июль 18, 2014, 21:38 »

у меня имена параметров зашиты в дефайнах
Записан
__Heaven__
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2130



Просмотр профиля
« Ответ #13 : Июль 18, 2014, 22:57 »

у меня имена параметров зашиты в дефайнах
Тоже достойный вариант. Мне нравится больше, чем копипаст
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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