Данный класс создан для упрощения сохранения настроек по средствам ini или conf файлов и системном реестре Windows
Он представляет платформа независимые настройки приложения и основан на QVariant который позволяет сохранять большинство типов
Для определения формата сохранения его необходимо объявить. Для более поздних версий используется следующие форматы:
NativeFormat
Использует наиболее подходящий вариант сохранения настроек
В Windows это системный реестр, Mac OS X API CFPreferences, в Unix текстовые конфигурационные файлы в формате INI.
Для сохранения настроек в INI файле:
IniFormat
Для пользовательского значения, возвращаемое registerFormat():
UserScope
В более новых версиях добавили несколько новых форматов:
Registry32Format и Registry64Format
Доступ к 32-битному и 64-битному системному реестру. Это значение перечисления было добавлено в Qt 5.7.
Рассмотрим несколько пример реализации данного класса.
Запись настроек в файл таких параметров как QString, int, double, unsigned int, QByteArray, QTime, QDateTime.
Пример записи файла методом QSettings
//Запись в файл настроек
QSettings settings("settings.ini",QSettings::IniFormat);
QString ip = "127.0.0.1";
int a = 10;
double b = 11.2;
unsigned int c = 12;
QByteArray d = "abc";
QTime e = QTime::currentTime();
QDateTime f = QDateTime::currentDateTime();
settings.beginGroup("Settings");
settings.setValue( "ip", ip);
settings.setValue("a",a);
settings.setValue("b",b);
settings.setValue("c",c);
settings.setValue("d",d);
settings.setValue("e",e);
settings.setValue("f",f);
settings.endGroup();
В результате будет создан файл settings.ini в котором будет записано следующее:
[Settings] ip=127.0.0.1 a=10 b=11.2 c=12 d=@ByteArray(abc) e=@Variant(\0\0\0\xf\x2\x95\xaat) f=@DateTime(\0\0\0\x10\0\0\0\0\0\0%\x84:\x2\x95\xaat\0)
[Settings] — Название группу, далее следуют параметры. Группы используется для логического объединения информации.
Пример чтения файла методом QSettings
Пример чтение из ранее созданного файла settings.ini.
//Чтение данный из файла
QSettings settings ("settings.ini",QSettings::IniFormat);
settings.beginGroup("Settings");
QString ip = settings.value("ip").toString();
int a = settings.value("a").toInt();
double b = settings.value("b").toDouble();
unsigned int c = settings.value("c").toUInt();
QByteArray d = settings.value("d").toByteArray();
QTime e = settings.value("e",e).toTime();
QDateTime f = settings.value("f",f).toDateTime();
settings.endGroup();
При чтении параметров можно задать параметр по умолчанию, который будет установлено в случаи если данный параметр не удалось прочитать из заданного файла.
Пример реализации установки параметра по умолчанию:
QString ip = settings.value("ip",QString("127.0.0.1")).toString();
Рассмотрим поподробней registerFormat для QSettings, данный метод регистрирует пользовательский формат хранения. В случае успеха возвращает специальное значение Format, которое затем может быть передано в конструктор QSettings. При неудаче вернет InvalidFormat.
Пример реализации:
bool readXml(QIODevice &device, QSettings::SettingsMap &map);
bool writeXml(QIODevice &device, const QSettings::SettingsMap &map);
QSettings::Format XmlFormat = QSettings::registerFormat("xml", readXml, writeXml);
QSettings settings(XmlFormat, QSettings::UserScope, "Settings", "Settings2");
Параметры readXml и writeXml являются указателями на функции, которые читают и записывают набор пар ключ / значение. Параметр QIODevice для функций чтения и записи всегда открывается в двоичном режиме.
