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"
25#include <QtCore/qvariant.h>
29#include "private/qobject_p.h"
35#define QT_QSETTINGS_ALWAYS_CASE_SENSITIVE_AND_FORGET_ORIGINAL_KEY_ORDER
39#define QSETTINGS_P_H_VERSION 3
47 inline QSettingsKey(
const QString &key, Qt::CaseSensitivity cs, qsizetype = -1)
48 :
QString(
key) { Q_ASSERT(cs == Qt::CaseSensitive); Q_UNUSED(cs); }
54static const Qt::CaseSensitivity IniCaseSensitivity = Qt::CaseInsensitive;
56class QSettingsKey :
public QString
59 inline QSettingsKey(
const QString &key, Qt::CaseSensitivity cs, qsizetype position = -1)
60 : QString(key), theOriginalKey(key), theOriginalKeyPosition(position)
62 if (cs == Qt::CaseInsensitive)
63 QString::operator=(toLower());
66 inline QString originalCaseKey()
const {
return theOriginalKey; }
67 inline qsizetype originalKeyPosition()
const {
return theOriginalKeyPosition; }
70 QString theOriginalKey;
71 qsizetype theOriginalKeyPosition;
92 inline bool isArray()
const {
return num != -1; }
95 { num = i + 1;
if (maxNum != -1 && num > maxNum) maxNum = num; }
109 result += QString::number(num);
142 QConfFile(
const QString &name,
bool _userPerms);
144 friend class QConfFile_createsItself;
149 :
public QObjectPrivate
155 Q_DECLARE_PUBLIC(QSettings)
158 QSettingsPrivate(QSettings::Format format);
159 QSettingsPrivate(QSettings::Format format, QSettings::Scope scope,
160 const QString &organization,
const QString &application);
161 virtual ~QSettingsPrivate();
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;
167 enum ChildSpec { AllKeys, ChildKeys, ChildGroups };
168 virtual QStringList children(
const QString &prefix, ChildSpec spec)
const = 0;
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;
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();
183 static QString normalizedKey(QAnyStringView key);
184 static QSettingsPrivate *create(QSettings::Format format, QSettings::Scope scope,
185 const QString &organization,
const QString &application);
186 static QSettingsPrivate *create(
const QString &fileName, QSettings::Format format);
188 static void processChild(QStringView key, ChildSpec spec, QStringList &result);
191 static QStringList variantListToStringList(
const QVariantList &l);
192 static QVariant stringListToVariantList(
const QStringList &l);
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);
205 QSettings::Format format;
206 QSettings::Scope scope;
207 QString organizationName;
208 QString applicationName;
211 QStack<QSettingsGroup> groupStack;
215 bool atomicSyncOnly =
true;
216 mutable QSettings::Status status;
227 void remove(
const QString &key)
override;
228 void set(
const QString &key,
const QVariant &value)
override;
242 static bool readIniLine(QByteArrayView data, qsizetype &dataPos,
243 qsizetype &lineStart, qsizetype &lineLen,
244 qsizetype &equalsPos);
258 void ensureAllSectionsParsed(
QConfFile *confFile)
const;
261 QList<QConfFile *> confFiles;
265 Qt::CaseSensitivity caseSensitivity;
266 qsizetype nextPosition;
static bool readIniSection(const QSettingsKey §ion, QByteArrayView data, ParsedSettingsMap *settingsMap)
void set(const QString &key, const QVariant &value) override
QStringList children(const QString &prefix, ChildSpec spec) const override
~QConfFileSettingsPrivate()
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
QConfFileSettingsPrivate(const QString &fileName, QSettings::Format format)
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
UnparsedSettingsMap unparsedIniSections
ParsedSettingsMap originalKeys
static Q_AUTOTEST_EXPORT void clearCache()
ParsedSettingsMap removedKeys
ParsedSettingsMap mergedKeyMap() const
static QConfFile * fromName(const QString &name, bool _userPerms)
ParsedSettingsMap addedKeys
QSettingsGroup(const QString &s, bool guessArraySize)
qsizetype arraySizeGuess() const
QSettingsGroup(const QString &s)
void setArrayIndex(qsizetype i)
QSettingsIniKey(const QString &str, qsizetype pos=-1)
QSettingsKey(const QString &key, Qt::CaseSensitivity cs, qsizetype=-1)
QString originalCaseKey() const
qsizetype originalKeyPosition() const
Combined button and popup list for selecting options.
static const char charTraits[256]
QMap< QString, QSettingsIniSection > IniMap
QList< QConfFileCustomFormat > CustomFormatVector
static bool operator<(const QSettingsIniKey &k1, const QSettingsIniKey &k2)
static constexpr QChar sep
static Path getPath(QSettings::Format format, QSettings::Scope scope)
QMap< QSettingsIniKey, QVariant > IniKeyMap
static int pathHashKey(QSettings::Format format, QSettings::Scope scope)
static QString make_user_path()
static std::unique_lock< QBasicMutex > initDefaultPaths(std::unique_lock< QBasicMutex > locker)
static QString make_user_path_without_qstandard_paths()
QHash< QString, QConfFile * > ConfFileHash
QHash< int, Path > PathHash
Q_DECLARE_TYPEINFO(QSettingsIniSection, Q_RELOCATABLE_TYPE)
Q_DECLARE_TYPEINFO(QConfFileCustomFormat, Q_RELOCATABLE_TYPE)
Q_DECLARE_TYPEINFO(QSettingsIniKey, Q_RELOCATABLE_TYPE)
QCache< QString, QConfFile > ConfFileCache
#define FLUSH_CURRENT_SECTION()
static void iniChopTrailingSpaces(QString &str, qsizetype limit)
Q_DECLARE_TYPEINFO(QSettingsGroup, Q_RELOCATABLE_TYPE)
static const Qt::CaseSensitivity IniCaseSensitivity
Q_DECLARE_TYPEINFO(QSettingsKey, Q_RELOCATABLE_TYPE)
QMap< QSettingsKey, QByteArray > UnparsedSettingsMap
QMap< QSettingsKey, QVariant > ParsedSettingsMap
#define QT_QSETTINGS_ALWAYS_CASE_SENSITIVE_AND_FORGET_ORIGINAL_KEY_ORDER
QSettings settings("MySoft", "Star Runner")
[0]