QtCanpool 3.3.0
载入中...
搜索中...
未找到
qxsettings.cpp
浏览该文件的文档.
1
6#include "qxsettings.h"
7
8#include <QtCore/QMap>
9
11
13static QString qualifiedKey(const QSettings *settings, const QString &key)
14{
15 const QString group = settings->group();
16 return group.isEmpty() ? key : group + QLatin1Char('/') + key;
17}
18
19class QxSettingsPrivate
20{
21 QX_DECLARE_PUBLIC(QxSettings)
22public:
23 QxSettingsPrivate()
24 : m_settings(nullptr)
25 , m_versionKey(QStringLiteral("version"))
26 {
27 }
28public:
29 QSettings *m_settings;
30 QString m_versionKey;
31 QMap<int, QxSettings::Migration> m_migrations;
32};
33
34QxSettings::QxSettings(const QString &organization, const QString &application, QObject *parent)
35 : QObject(parent)
36 , d_ptr(new QxSettingsPrivate())
37{
38 Q_D(QxSettings);
39 d->m_settings = new QSettings(organization, application, this);
40}
41
42QxSettings::QxSettings(const QString &fileName, QSettings::Format format, QObject *parent)
43 : QObject(parent)
44 , d_ptr(new QxSettingsPrivate())
45{
46 Q_D(QxSettings);
47 d->m_settings = new QSettings(fileName, format, this);
48}
49
54
55QSettings *QxSettings::settings() const
56{
57 Q_D(const QxSettings);
58 return d->m_settings;
59}
60
61QString QxSettings::fileName() const
62{
63 Q_D(const QxSettings);
64 return d->m_settings->fileName();
65}
66
67// Group ---------------------------------------------------------------------
68
69void QxSettings::beginGroup(const QString &prefix)
70{
71 Q_D(QxSettings);
72 d->m_settings->beginGroup(prefix);
73}
74
76{
77 Q_D(QxSettings);
78 d->m_settings->endGroup();
79}
80
81QString QxSettings::group() const
82{
83 Q_D(const QxSettings);
84 return d->m_settings->group();
85}
86
87// Read ----------------------------------------------------------------------
88
89bool QxSettings::contains(const QString &key) const
90{
91 Q_D(const QxSettings);
92 return d->m_settings->contains(key);
93}
94
95QVariant QxSettings::value(const QString &key, const QVariant &defaultValue) const
96{
97 Q_D(const QxSettings);
98 return d->m_settings->value(key, defaultValue);
99}
100
101QString QxSettings::stringValue(const QString &key, const QString &defaultValue) const
102{
103 return value(key, defaultValue).toString();
104}
105
106int QxSettings::intValue(const QString &key, int defaultValue) const
107{
108 return value(key, defaultValue).toInt();
109}
110
111bool QxSettings::boolValue(const QString &key, bool defaultValue) const
112{
113 return value(key, defaultValue).toBool();
114}
115
116QStringList QxSettings::stringListValue(const QString &key, const QStringList &defaultValue) const
117{
118 return value(key, defaultValue).toStringList();
119}
120
121QStringList QxSettings::allKeys() const
122{
123 Q_D(const QxSettings);
124 return d->m_settings->allKeys();
125}
126
127// Write ---------------------------------------------------------------------
128
129void QxSettings::setValue(const QString &key, const QVariant &value)
130{
131 Q_D(QxSettings);
132 d->m_settings->setValue(key, value);
133 emit valueChanged(qualifiedKey(d->m_settings, key), value);
134}
135
136void QxSettings::remove(const QString &key)
137{
138 Q_D(QxSettings);
139 const QString qualified = qualifiedKey(d->m_settings, key);
140 d->m_settings->remove(key);
141 emit valueChanged(qualified, QVariant());
142}
143
145{
146 Q_D(QxSettings);
147 d->m_settings->clear();
148 emit valueChanged(QString(), QVariant());
149}
150
152{
153 Q_D(QxSettings);
154 d->m_settings->sync();
155}
156
157// Migration -----------------------------------------------------------------
158
159void QxSettings::setVersionKey(const QString &key)
160{
161 Q_D(QxSettings);
162 d->m_versionKey = key;
163}
164
166{
167 Q_D(const QxSettings);
168 return d->m_versionKey;
169}
170
172{
173 Q_D(const QxSettings);
174 return d->m_settings->value(d->m_versionKey, 0).toInt();
175}
176
177void QxSettings::setVersion(int version)
178{
179 Q_D(QxSettings);
180 d->m_settings->setValue(d->m_versionKey, version);
181}
182
183void QxSettings::addMigration(int version, Migration migration)
184{
185 Q_D(QxSettings);
186 d->m_migrations.insert(version, migration);
187}
188
189int QxSettings::migrate(int targetVersion)
190{
191 Q_D(QxSettings);
192 const int stored = version();
193 if (targetVersion <= stored) {
194 return 0;
195 }
196
197 int applied = 0;
198 for (auto it = d->m_migrations.begin(); it != d->m_migrations.end(); ++it) {
199 if (it.key() <= stored || it.key() > targetVersion) {
200 continue;
201 }
202 if (it.value()) {
203 it.value()(*this);
204 ++applied;
205 }
206 }
207
208 setVersion(targetVersion);
209 return applied;
210}
211
Thin wrapper around QSettings that keeps call sites free of the usual boilerplate: typed accessors wi...
Definition qxsettings.h:32
QStringList stringListValue(const QString &key, const QStringList &defaultValue=QStringList()) const
QString group() 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.
~QxSettings() override
int version() const
std::function< void(QxSettings &settings)> Migration
A migration step that upgrades the stored layout to a target version.
Definition qxsettings.h:36
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
const char * fileName
Definition qxtheme.cpp:26