OSDN Git Service

QSettings does not need QObject as base class
authorIvailo Monev <xakepa10@gmail.com>
Sat, 11 Jun 2022 19:57:30 +0000 (22:57 +0300)
committerIvailo Monev <xakepa10@gmail.com>
Sat, 11 Jun 2022 19:57:30 +0000 (22:57 +0300)
Signed-off-by: Ivailo Monev <xakepa10@gmail.com>
src/core/io/qsettings.cpp
src/core/io/qsettings.h
src/core/io/qsettings_p.h

index 824bd90..dc20531 100644 (file)
@@ -297,12 +297,11 @@ void QSettingsPrivate::write()
 
 void QSettingsPrivate::notify()
 {
-    Q_Q(QSettings);
     QMutexLocker locker(qSettingsMutex());
     shouldwrite = true;
     for (int i = 0; i < qGlobalSettings()->size(); i++) {
         QSettings *setting = qGlobalSettings()->at(i);
-        if (setting != q && setting->fileName() == q->fileName()) {
+        if (setting->d_func() != this && setting->fileName() == filename) {
             setting->d_func()->map = map;
             setting->d_func()->shouldwrite = false;
         }
@@ -689,8 +688,8 @@ QStringList QSettingsPrivate::splitArgs(const QString &s, int idx)
 
     \sa QCoreApplication::setApplicationName()
 */
-QSettings::QSettings(QObject *parent)
-    : QObject(*new QSettingsPrivate(QSettings::NativeFormat), parent)
+QSettings::QSettings()
+    : d_ptr(new QSettingsPrivate(QSettings::NativeFormat))
 {
     QMutexLocker locker(qSettingsMutex());
     qGlobalSettings()->append(this);
@@ -699,15 +698,14 @@ QSettings::QSettings(QObject *parent)
 }
 
 /*!
-    Constructs a QSettings object for accessing settings with parent
-    \a parent.
+    Constructs a QSettings object for accessing settings.
 
     If \a format is QSettings::NativeFormat, the native JSON API is used
     for storing settings. If \a format is QSettings::IniFormat, the INI
     format is used.
 */
-QSettings::QSettings(Format format, QObject *parent)
-    : QObject(*new QSettingsPrivate(format), parent)
+QSettings::QSettings(Format format)
+    : d_ptr(new QSettingsPrivate(format))
 {
     QMutexLocker locker(qSettingsMutex());
     qGlobalSettings()->append(this);
@@ -716,9 +714,8 @@ QSettings::QSettings(Format format, QObject *parent)
 }
 
 /*!
-    Constructs a QSettings object for accessing the settings
-    stored in the file called \a fileName, with parent \a parent. If
-    the file doesn't already exist, it is created.
+    Constructs a QSettings object for accessing the settings stored in the
+    file called \a fileName. If the file doesn't already exist, it is created.
 
     The meaning of \a fileName depends on the format. If \a format is
     QSettings::NativeFormat, the filename will end with end with .json
@@ -735,8 +732,8 @@ QSettings::QSettings(Format format, QObject *parent)
 
     \sa fileName()
 */
-QSettings::QSettings(const QString &fileName, Format format, QObject *parent)
-    : QObject(*new QSettingsPrivate(fileName, format), parent)
+QSettings::QSettings(const QString &fileName, Format format)
+    : d_ptr(new QSettingsPrivate(fileName, format))
 {
     QMutexLocker locker(qSettingsMutex());
     qGlobalSettings()->append(this);
@@ -758,6 +755,7 @@ QSettings::~QSettings()
     QMutexLocker locker(qSettingsMutex());
     const int index = qGlobalSettings()->indexOf(this);
     qGlobalSettings()->remove(index);
+    delete d_ptr;
 }
 
 /*!
@@ -1035,8 +1033,6 @@ QVariant QSettings::value(const QString &key, const QVariant &defaultValue) cons
     Typedef for QMap<QString, QVariant>.
 */
 
-#include "moc_qsettings.h"
-
 QT_END_NAMESPACE
 
 #endif // QT_NO_SETTINGS
index 1500d88..eafc2ce 100644 (file)
@@ -31,9 +31,8 @@ QT_BEGIN_NAMESPACE
 
 class QSettingsPrivate;
 
-class Q_CORE_EXPORT QSettings : public QObject
+class Q_CORE_EXPORT QSettings
 {
-    Q_OBJECT
     Q_DECLARE_PRIVATE(QSettings)
 
 public:
@@ -50,9 +49,9 @@ public:
 
     typedef QMap<QString, QVariant> SettingsMap;
 
-    explicit QSettings(QObject *parent = nullptr);
-    QSettings(Format format, QObject *parent = nullptr);
-    QSettings(const QString &fileName, Format format = NativeFormat, QObject *parent = nullptr);
+    QSettings();
+    QSettings(Format format);
+    QSettings(const QString &fileName, Format format = NativeFormat);
     ~QSettings();
 
     void clear();
@@ -79,6 +78,7 @@ public:
 
 private:
     Q_DISABLE_COPY(QSettings)
+    QSettingsPrivate *d_ptr;
 };
 
 QT_END_NAMESPACE
index 8db0a90..4ef2a4b 100644 (file)
@@ -43,10 +43,7 @@ typedef bool (*QSettingsReadFunc)(QIODevice &device, QSettings::SettingsMap &map
 typedef bool (*QSettingsWriteFunc)(QIODevice &device, const QSettings::SettingsMap &map);
 
 class QSettingsPrivate
-    : public QObjectPrivate
 {
-    Q_DECLARE_PUBLIC(QSettings)
-
 public:
     QSettingsPrivate(QSettings::Format format);
     QSettingsPrivate(const QString &fileName, QSettings::Format format);
@@ -71,6 +68,9 @@ public:
     QSettingsReadFunc readFunc;
     QSettingsWriteFunc writeFunc;
     bool shouldwrite;
+
+private:
+    Q_DISABLE_COPY(QSettingsPrivate);
 };
 
 QT_END_NAMESPACE