Какой формат хранения настроек выбрать? - PullRequest
5 голосов
/ 01 декабря 2009

Я пишу приложение Qt, и мне нужно будет сохранить настройки программы. Я хочу, чтобы они могли легко редактироваться неопытными пользователями, но при этом были достаточно гибкими для опытных пользователей (таким образом, позволяли легко автоматизировать редактирование с помощью других программ, скриптов и т. Д.). QSettings предоставляет два формата: собственный формат, который для Windows является реестром, и формат INI, который является родным для большинства других платформ. С INI все в порядке, но просмотр @QString (...) или других материалов Qt там на самом деле не читабелен и может привести к ошибкам.

Реестр тоже не велик. Это не было разработано, чтобы быть запутанным и таким образом не совсем хорошим для редактирования или расширенного использования; это решает проблему синхронизации между потоками и несколькими объектами QSettings (поэтому я не уничтожаю все, хотя могу использовать только один глобальный объект, защищенный блокировщиком чтения-записи). Я смотрю на XML, но он чертовски многословен и требует написания формата QSettings (на самом деле не проблема), но очень гибкий.

Я знаю, что существуют другие альтернативы XML, но я не очень знаком с ними; Я, конечно, не хочу писать парсер, исключение для моего собственного окончательного формата, а не для базовых вещей.

Обновление - Примечание: Я вообще не буду обходить QSettings, я просто напишу для него формат, который выглядит так, как будто пройдены всего два указателя на функции (для функции чтения и записи) статической функции, и тогда я могу использовать свой формат.

Обновление 2: Я также беспокоюсь о серверах Linux, которые обычно не имеют графического интерфейса. Я хочу, чтобы люди могли легко редактировать конфигурацию с сервера через nano или что-то подобное, без использования менеджера (да, у меня будет демон-сервер и удаленный менеджер графического интерфейса).

Ответы [ 4 ]

3 голосов
/ 02 декабря 2009

Вы можете использовать класс QSettings для достижения этой цели. Это абстракционный класс, который позволяет вашим приложениям сохранять свои настройки, чтобы получить их при следующем запуске.

Сохранить настройки:

QSettings settings("ValueName",  "Value");

Чтение настроек:

QString v = settings.value("ValueName");
1 голос
/ 02 декабря 2009

Если по какой-либо причине вы в конечном итоге пропустили QSettings и рассматривали XML для своего файла конфигурации, я предлагаю вам взглянуть на JSON или YAST, в зависимости от того, как вам нравятся доступные библиотеки.

Как примечание, если вы не хотите, чтобы пользователи когда-либо редактировали файл вручную, просто выберите то, что вам удобнее (QSettings?), И продолжайте свою жизнь, так как выбор формата не будет иметь значения один бит (хар хар).

1 голос
/ 02 декабря 2009

Я бы начал с выполнения QSettings через файлы .ini и посмотрел, не возникнет ли у вас много проблем с ним. Если проблем нет, то нет необходимости искать решение XML. Если вам в конечном итоге понадобится решение XML, вы можете (как уже упоминалось) добавить средство форматирования для объектов QSettings.

0 голосов
/ 01 декабря 2009

Еще один способ взглянуть на многословие - это надежность контента. Если по какой-либо причине (альфа-частица бомбардирует диск, вызывая переворачивание одного бита), вы все равно можете пойти туда и внести необходимые исправления ошибок ... так что есть выгода, но и затраты, связанные с этим ... двоичный файл, ошибка в один бит означает, что данные полностью потеряны

...