Qt
Internal/Contributor docs for the Qt SDK. <b>Note:</b> These are NOT official API docs; those are found <a href='https://doc.qt.io/'>here</a>.
Loading...
Searching...
No Matches
qsettings_p.h
Go to the documentation of this file.
1// Copyright (C) 2022 The Qt Company Ltd.
2// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
3
4#ifndef QSETTINGS_P_H
5#define QSETTINGS_P_H
6
7//
8// W A R N I N G
9// -------------
10//
11// This file is not part of the Qt API. It exists purely as an
12// implementation detail. This header file may change from version to
13// version without notice, or even be removed.
14//
15// We mean it.
16//
17
18#include "QtCore/qdatetime.h"
19#include "QtCore/qmap.h"
20#include "QtCore/qmutex.h"
21#include "QtCore/qiodevice.h"
22#include "QtCore/qstack.h"
23#include "QtCore/qstringlist.h"
24
25#include <QtCore/qvariant.h>
26#include "qsettings.h"
27
28#ifndef QT_NO_QOBJECT
29#include "private/qobject_p.h"
30#endif
31
33
34#ifndef Q_OS_WIN
35#define QT_QSETTINGS_ALWAYS_CASE_SENSITIVE_AND_FORGET_ORIGINAL_KEY_ORDER
36#endif
37
38// used in testing framework
39#define QSETTINGS_P_H_VERSION 3
40
41#ifdef QT_QSETTINGS_ALWAYS_CASE_SENSITIVE_AND_FORGET_ORIGINAL_KEY_ORDER
43
44class QSettingsKey : public QString
45{
46public:
47 inline QSettingsKey(const QString &key, Qt::CaseSensitivity cs, qsizetype /* position */ = -1)
49
50 inline QString originalCaseKey() const { return *this; }
51 inline qsizetype originalKeyPosition() const { return -1; }
52};
53#else
55
56class QSettingsKey : public QString
57{
58public:
60 : QString(key), theOriginalKey(key), theOriginalKeyPosition(position)
61 {
64 }
65
66 inline QString originalCaseKey() const { return theOriginalKey; }
67 inline qsizetype originalKeyPosition() const { return theOriginalKeyPosition; }
68
69private:
70 QString theOriginalKey;
71 qsizetype theOriginalKeyPosition;
72};
73#endif
74
76
77typedef QMap<QSettingsKey, QByteArray> UnparsedSettingsMap;
78typedef QMap<QSettingsKey, QVariant> ParsedSettingsMap;
79
81{
82public:
84 : num(-1), maxNum(-1) {}
85 inline QSettingsGroup(const QString &s)
86 : str(s), num(-1), maxNum(-1) {}
87 inline QSettingsGroup(const QString &s, bool guessArraySize)
88 : str(s), num(0), maxNum(guessArraySize ? 0 : -1) {}
89
90 inline QString name() const { return str; }
91 inline QString toString() const;
92 inline bool isArray() const { return num != -1; }
93 inline qsizetype arraySizeGuess() const { return maxNum; }
95 { num = i + 1; if (maxNum != -1 && num > maxNum) maxNum = num; }
96
100};
102
104{
106 result = str;
107 if (num > 0) {
108 result += u'/';
110 }
111 return result;
112}
113
115{
116public:
117 ~QConfFile();
118
120 bool isWritable() const;
121
122 static QConfFile *fromName(const QString &name, bool _userPerms);
124 static void clearCache();
125
136
137private:
138#ifdef Q_DISABLE_COPY
139 QConfFile(const QConfFile &);
140 QConfFile &operator=(const QConfFile &);
141#endif
142 QConfFile(const QString &name, bool _userPerms);
143
144 friend class QConfFile_createsItself; // silences compiler warning
145};
146
148#ifndef QT_NO_QOBJECT
149 : public QObjectPrivate
150#endif
151{
152#ifdef QT_NO_QOBJECT
154#endif
155 Q_DECLARE_PUBLIC(QSettings)
156
157public:
160 const QString &organization, const QString &application);
161 virtual ~QSettingsPrivate();
162
163 virtual void remove(const QString &key) = 0;
164 virtual void set(const QString &key, const QVariant &value) = 0;
165 virtual std::optional<QVariant> get(const QString &key) const = 0;
166
167 enum ChildSpec { AllKeys, ChildKeys, ChildGroups };
168 virtual QStringList children(const QString &prefix, ChildSpec spec) const = 0;
169
170 virtual void clear() = 0;
171 virtual void sync() = 0;
172 virtual void flush() = 0;
173 virtual bool isWritable() const = 0;
174 virtual QString fileName() const = 0;
175
176 QVariant value(QAnyStringView key, const QVariant *defaultValue) const;
177 QString actualKey(QAnyStringView key) const;
178 void beginGroupOrArray(const QSettingsGroup &group);
179 void setStatus(QSettings::Status status) const;
180 void requestUpdate();
181 void update();
182
183 static QString normalizedKey(QAnyStringView key);
185 const QString &organization, const QString &application);
187
188 static void processChild(QStringView key, ChildSpec spec, QStringList &result);
189
190 // Variant streaming functions
191 static QStringList variantListToStringList(const QVariantList &l);
192 static QVariant stringListToVariantList(const QStringList &l);
193
194 // parser functions
195 static QString variantToString(const QVariant &v);
196 static QVariant stringToVariant(const QString &s);
197 static void iniEscapedKey(const QString &key, QByteArray &result);
198 static bool iniUnescapedKey(QByteArrayView key, QString &result);
199 static void iniEscapedString(const QString &str, QByteArray &result);
200 static void iniEscapedStringList(const QStringList &strs, QByteArray &result);
201 static bool iniUnescapedStringList(QByteArrayView str, QString &stringResult,
202 QStringList &stringListResult);
203 static QStringList splitArgs(const QString &s, qsizetype idx);
204
209
210protected:
211 QStack<QSettingsGroup> groupStack;
215 bool atomicSyncOnly = true;
217};
218
220{
221public:
223 const QString &organization, const QString &application);
226
227 void remove(const QString &key) override;
228 void set(const QString &key, const QVariant &value) override;
229 std::optional<QVariant> get(const QString &key) const override;
230
231 QStringList children(const QString &prefix, ChildSpec spec) const override;
232
233 void clear() override;
234 void sync() override;
235 void flush() override;
236 bool isWritable() const override;
237 QString fileName() const override;
238
239 bool readIniFile(QByteArrayView data, UnparsedSettingsMap *unparsedIniSections);
240 static bool readIniSection(const QSettingsKey &section, QByteArrayView data,
241 ParsedSettingsMap *settingsMap);
242 static bool readIniLine(QByteArrayView data, qsizetype &dataPos,
243 qsizetype &lineStart, qsizetype &lineLen,
244 qsizetype &equalsPos);
245
246protected:
247 const QList<QConfFile *> &getConfFiles() const { return confFiles; }
248
249private:
250 void initFormat();
251 virtual void initAccess();
252 void syncConfFile(QConfFile *confFile);
253 bool writeIniFile(QIODevice &device, const ParsedSettingsMap &map);
254#ifdef Q_OS_DARWIN
255 bool readPlistFile(const QByteArray &data, ParsedSettingsMap *map) const;
256 bool writePlistFile(QIODevice &file, const ParsedSettingsMap &map) const;
257#endif
258 void ensureAllSectionsParsed(QConfFile *confFile) const;
259 void ensureSectionParsed(QConfFile *confFile, const QSettingsKey &key) const;
260
261 QList<QConfFile *> confFiles;
262 QSettings::ReadFunc readFunc;
263 QSettings::WriteFunc writeFunc;
264 QString extension;
265 Qt::CaseSensitivity caseSensitivity;
266 qsizetype nextPosition;
267#ifdef Q_OS_WASM
268 friend class QWasmIDBSettingsPrivate;
269#endif
270};
271
273
274#endif // QSETTINGS_P_H
IOBluetoothDevice * device
\inmodule QtCore
\inmodule QtCore
Definition qatomic.h:112
\inmodule QtCore
Definition qbytearray.h:57
static bool readIniSection(const QSettingsKey &section, QByteArrayView data, ParsedSettingsMap *settingsMap)
virtual void initAccess()
bool readIniFile(QByteArrayView data, UnparsedSettingsMap *unparsedIniSections)
bool isWritable() const override
QString fileName() const override
QConfFileSettingsPrivate(QSettings::Format format, QSettings::Scope scope, const QString &organization, const QString &application)
void remove(const QString &key) override
const QList< QConfFile * > & getConfFiles() const
static bool readIniLine(QByteArrayView data, qsizetype &dataPos, qsizetype &lineStart, qsizetype &lineLen, qsizetype &equalsPos)
std::optional< QVariant > get(const QString &key) const override
QString name
QAtomicInt ref
UnparsedSettingsMap unparsedIniSections
ParsedSettingsMap originalKeys
qint64 size
bool userPerms
static Q_AUTOTEST_EXPORT void clearCache()
QDateTime timeStamp
QMutex mutex
ParsedSettingsMap removedKeys
ParsedSettingsMap mergedKeyMap() const
static QConfFile * fromName(const QString &name, bool _userPerms)
friend class QConfFile_createsItself
bool isWritable() const
ParsedSettingsMap addedKeys
\inmodule QtCore\reentrant
Definition qdatetime.h:283
\inmodule QtCore \reentrant
Definition qiodevice.h:34
\inmodule QtCore
Definition qmutex.h:281
QObject * q_ptr
Definition qobject.h:72
QObjectList children
Definition qobject.h:74
QSettingsGroup(const QString &s, bool guessArraySize)
Definition qsettings_p.h:87
qsizetype num
Definition qsettings_p.h:98
QString toString() const
QString name() const
Definition qsettings_p.h:90
bool isArray() const
Definition qsettings_p.h:92
qsizetype arraySizeGuess() const
Definition qsettings_p.h:93
qsizetype maxNum
Definition qsettings_p.h:99
QSettingsGroup(const QString &s)
Definition qsettings_p.h:85
void setArrayIndex(qsizetype i)
Definition qsettings_p.h:94
QSettingsKey(const QString &key, Qt::CaseSensitivity cs, qsizetype=-1)
Definition qsettings_p.h:47
QString originalCaseKey() const
Definition qsettings_p.h:50
qsizetype originalKeyPosition() const
Definition qsettings_p.h:51
virtual std::optional< QVariant > get(const QString &key) const =0
virtual QString fileName() const =0
QSettings::Status status
virtual void sync()=0
virtual void set(const QString &key, const QVariant &value)=0
QString organizationName
virtual bool isWritable() const =0
virtual void clear()=0
virtual void flush()=0
QSettings::Format format
QStack< QSettingsGroup > groupStack
virtual QStringList children(const QString &prefix, ChildSpec spec) const =0
QSettings::Scope scope
virtual void remove(const QString &key)=0
QString applicationName
\inmodule QtCore
Definition qsettings.h:30
Format
This enum type specifies the storage format used by QSettings.
Definition qsettings.h:48
Scope
This enum specifies whether settings are user-specific or shared by all users of the same system.
Definition qsettings.h:84
bool(* WriteFunc)(QIODevice &device, const SettingsMap &map)
Typedef for a pointer to a function with the following signature:
Definition qsettings.h:172
Status
The following status values are possible:
Definition qsettings.h:39
bool(* ReadFunc)(QIODevice &device, SettingsMap &map)
Typedef for a pointer to a function with the following signature:
Definition qsettings.h:171
\inmodule QtCore
\inmodule QtCore
Definition qstringview.h:78
\macro QT_RESTRICTED_CAST_FROM_ASCII
Definition qstring.h:129
QString & operator=(QChar c)
Definition qstring.cpp:2901
static QString static QString qsizetype Qt::CaseSensitivity cs
Definition qstring.h:291
QString toLower() const &
Definition qstring.h:435
static QString number(int, int base=10)
This is an overloaded member function, provided for convenience. It differs from the above function o...
Definition qstring.cpp:8084
\inmodule QtCore
Definition qvariant.h:65
QString str
[2]
QMap< QString, QString > map
[6]
Combined button and popup list for selecting options.
CaseSensitivity
@ CaseInsensitive
@ CaseSensitive
static bool variantToString(const QVariant &arg, QString &out)
Definition qdbusutil.cpp:43
EGLOutputLayerEXT EGLint EGLAttrib value
[5]
GLsizei const GLfloat * v
[13]
GLuint64 key
GLint GLsizei GLsizei GLenum GLenum GLsizei void * data
GLboolean GLuint group
GLuint name
GLint GLsizei GLsizei GLenum format
GLdouble s
[6]
Definition qopenglext.h:235
GLuint64EXT * result
[6]
GLuint num
static qreal position(const QQuickItem *item, QQuickAnchors::Anchor anchorLine)
#define Q_ASSERT(cond)
Definition qrandom.cpp:47
static const Qt::CaseSensitivity IniCaseSensitivity
Definition qsettings_p.h:42
QMap< QSettingsKey, QByteArray > UnparsedSettingsMap
Definition qsettings_p.h:77
QMap< QSettingsKey, QVariant > ParsedSettingsMap
Definition qsettings_p.h:78
#define Q_AUTOTEST_EXPORT
#define Q_UNUSED(x)
@ Q_RELOCATABLE_TYPE
Definition qtypeinfo.h:158
#define Q_DECLARE_TYPEINFO(TYPE, FLAGS)
Definition qtypeinfo.h:180
ptrdiff_t qsizetype
Definition qtypes.h:165
long long qint64
Definition qtypes.h:60
QFuture< QSet< QChar > > set
[10]
QFile file
[0]
view create()