Данный класс создан для упрощения сохранения настроек по средствам 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 для функций чтения и записи всегда открывается в двоичном режиме.