Russian Qt Forum

Программирование => Алгоритмы => Тема начата: __Heaven__ от Июль 18, 2014, 10:40



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

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

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


Название: Re: Методы сохранения настроек
Отправлено: Swa от Июль 18, 2014, 10:49
Зачем? Там же всё автоматически делается.
Вот как я работаю https://github.com/WalterSullivan/qNotesManager/blob/master/src/applicationsettings.cpp (https://github.com/WalterSullivan/qNotesManager/blob/master/src/applicationsettings.cpp)


Название: Re: Методы сохранения настроек
Отправлено: Bepec от Июль 18, 2014, 10:51
У меня лично работает система "не бей лежачего". Программулина небольшая парсит файл, выбирает из него переменные и я потом выбираю которые сериализовать :) После выбора она тупо переписывает ф-ции save/loadSettings. Конечно она не совершенна, но мне хватает :)

PS словарик хорошо, но что то мне в нём не нравится :D


Название: Re: Методы сохранения настроек
Отправлено: __Heaven__ от Июль 18, 2014, 11:02
Зачем? Там же всё автоматически делается.
Вот как я работаю https://github.com/WalterSullivan/qNotesManager/blob/master/src/applicationsettings.cpp (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);
}


Название: Re: Методы сохранения настроек
Отправлено: Swa от Июль 18, 2014, 11:05
Я не понял, что именно делается автоматически. Мне почему-то очень не нравится это дублирование. Видимо из-за какого-нибудь возможного (см. код)

Ну от такого не застрахован никто, тут ктрл+с, ктрл+в вам в помощь.


Название: Re: Методы сохранения настроек
Отправлено: __Heaven__ от Июль 18, 2014, 11:12
У меня лично работает система "не бей лежачего". Программулина небольшая парсит файл, выбирает из него переменные и я потом выбираю которые сериализовать :) После выбора она тупо переписывает ф-ции save/loadSettings. Конечно она не совершенна, но мне хватает :)

PS словарик хорошо, но что то мне в нём не нравится :D

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

Ну от такого не застрахован никто, тут ктрл+с, ктрл+в вам в помощь.
Да, именно так я и делаю. Но, когда у меня был проект с большим количеством настроек, меня это почему-то раздражало  :-\ . Видимо, потому что лень было крутить колёсико мыши туда-сюда. А с перечислением, особенно если его загнать в какой-нибудь namespace, мне кажется, что будет кодирование немного проще. Всплывающие подсказки сделают всё сами за тебя. И не нужно будет выводить код в два окна, прокручивать его часами. Но, быть может, я и ошибаюсь  :D


Название: Re: Методы сохранения настроек
Отправлено: Bepec от Июль 18, 2014, 11:17
Собственно нет никаких доп файлов. Там в комментариях напротив переменных устанавливается знак на выбор :)
Аля
Код:
bool isComplete; //+

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


Название: Re: Методы сохранения настроек
Отправлено: Old от Июль 18, 2014, 11:23
Ручки всё равно устанут и вы сможете ошибиться в ключе словарика, или написать его два раза :D В общем никаких особых преимуществ :D
Что бы не ошибиться можно задать ключики через константы:
Код
C++ (Qt)
static const QString keyWindowPos = "window/pos";
static const QString keyWindowSize = "window/size";
 
и использовать их.
Тогда и ide будет помогать, а если все таки в написании ошибетесь, то и компилятор по рукам даст.


Название: Re: Методы сохранения настроек
Отправлено: Bepec от Июль 18, 2014, 11:52
Но тогда и добавление нового параметра превращается в головную боль - сделать константу, запилить её в 2 функции/или же добавить в словарь с ссылкой на переменную.


Название: Re: Методы сохранения настроек
Отправлено: kambala от Июль 18, 2014, 12:24
ключи словаря тоже надо делать константами по-хорошему


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

Тоже интересный вариант, мне кажется


Название: Re: Методы сохранения настроек
Отправлено: __Heaven__ от Июль 18, 2014, 12:45
Но тогда и добавление нового параметра превращается в головную боль - сделать константу, запилить её в 2 функции/или же добавить в словарь с ссылкой на переменную.
Я придумал словарь использовать ещё и потому, что можно прикрутить ещё один словарь, который будет указывать, как обрабатывать переменную, чтобы в функциях save/load обрабатывать параметры тупо в цикле  :P


Название: Re: Методы сохранения настроек
Отправлено: Alex Custov от Июль 18, 2014, 21:38
у меня имена параметров зашиты в дефайнах


Название: Re: Методы сохранения настроек
Отправлено: __Heaven__ от Июль 18, 2014, 22:57
у меня имена параметров зашиты в дефайнах
Тоже достойный вариант. Мне нравится больше, чем копипаст