Вопрос

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

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

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

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

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

Это было полезно?

Решение

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

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

Другие советы

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

Сохранение настроек:

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

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

QString v = settings.value("ValueName");

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top