13static QString qualifiedKey(
const QSettings *settings,
const QString &key)
15 const QString group = settings->group();
16 return group.isEmpty() ? key : group + QLatin1Char(
'/') + key;
19class QxSettingsPrivate
25 , m_versionKey(QStringLiteral(
"version"))
29 QSettings *m_settings;
31 QMap<int, QxSettings::Migration> m_migrations;
34QxSettings::QxSettings(
const QString &organization,
const QString &application, QObject *parent)
36 , d_ptr(new QxSettingsPrivate())
39 d->m_settings =
new QSettings(organization, application,
this);
44 , d_ptr(new QxSettingsPrivate())
47 d->m_settings =
new QSettings(
fileName, format,
this);
64 return d->m_settings->fileName();
72 d->m_settings->beginGroup(prefix);
78 d->m_settings->endGroup();
84 return d->m_settings->group();
92 return d->m_settings->contains(key);
98 return d->m_settings->value(key, defaultValue);
103 return value(key, defaultValue).toString();
108 return value(key, defaultValue).toInt();
113 return value(key, defaultValue).toBool();
118 return value(key, defaultValue).toStringList();
124 return d->m_settings->allKeys();
132 d->m_settings->setValue(key,
value);
139 const QString qualified = qualifiedKey(d->m_settings, key);
140 d->m_settings->remove(key);
147 d->m_settings->clear();
154 d->m_settings->sync();
162 d->m_versionKey = key;
168 return d->m_versionKey;
174 return d->m_settings->value(d->m_versionKey, 0).toInt();
180 d->m_settings->setValue(d->m_versionKey,
version);
186 d->m_migrations.insert(
version, migration);
193 if (targetVersion <= stored) {
198 for (
auto it = d->m_migrations.begin(); it != d->m_migrations.end(); ++it) {
199 if (it.key() <= stored || it.key() > targetVersion) {
Thin wrapper around QSettings that keeps call sites free of the usual boilerplate: typed accessors wi...
QStringList stringListValue(const QString &key, const QStringList &defaultValue=QStringList()) const
void addMigration(int version, Migration migration)
Registers a migration that upgrades the layout to version.
QStringList allKeys() const
QSettings * settings() const
The underlying QSettings instance, never null.
int migrate(int targetVersion)
Applies every registered step whose version is greater than the stored version and not greater than t...
void valueChanged(const QString &key, const QVariant &value)
Emitted whenever a value is written or removed.
QVariant value(const QString &key, const QVariant &defaultValue=QVariant()) const
QString fileName() const
Backing file name, empty for platform-native storage.
std::function< void(QxSettings &settings)> Migration
A migration step that upgrades the stored layout to a target version.
QString stringValue(const QString &key, const QString &defaultValue=QString()) const
void beginGroup(const QString &prefix)
bool boolValue(const QString &key, bool defaultValue=false) const
void remove(const QString &key)
int intValue(const QString &key, int defaultValue=0) const
QxSettings(const QString &organization, const QString &application=QString(), QObject *parent=nullptr)
Settings stored in the platform-native location for organization / application.
bool contains(const QString &key) const
QString versionKey() const
void setValue(const QString &key, const QVariant &value)
void setVersionKey(const QString &key)
Key holding the layout version; "version" by default.
void setVersion(int version)
#define QX_DECLARE_PUBLIC(Class)
#define QX_FINI_PRIVATE()
#define QX_CORE_BEGIN_NAMESPACE
#define QX_CORE_END_NAMESPACE