qsettings.h
上传用户:detong
上传日期:2022-06-22
资源大小:20675k
文件大小:10k
源码类别:

系统编程

开发平台:

Unix_Linux

  1. /****************************************************************************
  2. **
  3. ** Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies).
  4. ** Contact: Qt Software Information (qt-info@nokia.com)
  5. **
  6. ** This file is part of the QtCore module of the Qt Toolkit.
  7. **
  8. ** Commercial Usage
  9. ** Licensees holding valid Qt Commercial licenses may use this file in
  10. ** accordance with the Qt Commercial License Agreement provided with the
  11. ** Software or, alternatively, in accordance with the terms contained in
  12. ** a written agreement between you and Nokia.
  13. **
  14. **
  15. ** GNU General Public License Usage
  16. ** Alternatively, this file may be used under the terms of the GNU
  17. ** General Public License versions 2.0 or 3.0 as published by the Free
  18. ** Software Foundation and appearing in the file LICENSE.GPL included in
  19. ** the packaging of this file.  Please review the following information
  20. ** to ensure GNU General Public Licensing requirements will be met:
  21. ** http://www.fsf.org/licensing/licenses/info/GPLv2.html and
  22. ** http://www.gnu.org/copyleft/gpl.html.  In addition, as a special
  23. ** exception, Nokia gives you certain additional rights. These rights
  24. ** are described in the Nokia Qt GPL Exception version 1.3, included in
  25. ** the file GPL_EXCEPTION.txt in this package.
  26. **
  27. ** Qt for Windows(R) Licensees
  28. ** As a special exception, Nokia, as the sole copyright holder for Qt
  29. ** Designer, grants users of the Qt/Eclipse Integration plug-in the
  30. ** right for the Qt/Eclipse Integration to link to functionality
  31. ** provided by Qt Designer and its related libraries.
  32. **
  33. ** If you are unsure which license is appropriate for your use, please
  34. ** contact the sales department at qt-sales@nokia.com.
  35. **
  36. ****************************************************************************/
  37. #ifndef QSETTINGS_H
  38. #define QSETTINGS_H
  39. #include <QtCore/qobject.h>
  40. #include <QtCore/qvariant.h>
  41. #include <QtCore/qstring.h>
  42. QT_BEGIN_HEADER
  43. QT_BEGIN_NAMESPACE
  44. QT_MODULE(Core)
  45. QT_END_NAMESPACE
  46. #ifndef QT_NO_SETTINGS
  47. #ifdef QT3_SUPPORT
  48. #include <QtCore/qstringlist.h>
  49. #endif
  50. #include <ctype.h>
  51. QT_BEGIN_NAMESPACE
  52. #ifdef Status // we seem to pick up a macro Status --> int somewhere
  53. #undef Status
  54. #endif
  55. class QIODevice;
  56. class QSettingsPrivate;
  57. #ifndef QT_NO_QOBJECT
  58. class Q_CORE_EXPORT QSettings : public QObject
  59. #else
  60. class Q_CORE_EXPORT QSettings
  61. #endif
  62. {
  63. #ifndef QT_NO_QOBJECT
  64.     Q_OBJECT
  65. #else
  66.     QSettingsPrivate *d_ptr;
  67. #endif
  68.     Q_DECLARE_PRIVATE(QSettings)
  69. public:
  70.     enum Status {
  71.         NoError = 0,
  72.         AccessError,
  73.         FormatError
  74.     };
  75.     enum Format {
  76.         NativeFormat,
  77.         IniFormat,
  78.         InvalidFormat = 16,
  79.         CustomFormat1,
  80.         CustomFormat2,
  81.         CustomFormat3,
  82.         CustomFormat4,
  83.         CustomFormat5,
  84.         CustomFormat6,
  85.         CustomFormat7,
  86.         CustomFormat8,
  87.         CustomFormat9,
  88.         CustomFormat10,
  89.         CustomFormat11,
  90.         CustomFormat12,
  91.         CustomFormat13,
  92.         CustomFormat14,
  93.         CustomFormat15,
  94.         CustomFormat16
  95.     };
  96.     enum Scope {
  97.         UserScope,
  98.         SystemScope
  99. #ifdef QT3_SUPPORT
  100.         ,
  101.         User = UserScope,
  102.         Global = SystemScope
  103. #endif
  104.     };
  105. #ifndef QT_NO_QOBJECT
  106.     explicit QSettings(const QString &organization,
  107.                        const QString &application = QString(), QObject *parent = 0);
  108.     QSettings(Scope scope, const QString &organization,
  109.               const QString &application = QString(), QObject *parent = 0);
  110.     QSettings(Format format, Scope scope, const QString &organization,
  111.       const QString &application = QString(), QObject *parent = 0);
  112.     QSettings(const QString &fileName, Format format, QObject *parent = 0);
  113.     explicit QSettings(QObject *parent = 0);
  114. #else
  115.     explicit QSettings(const QString &organization,
  116.                        const QString &application = QString());
  117.     QSettings(Scope scope, const QString &organization,
  118.               const QString &application = QString());
  119.     QSettings(Format format, Scope scope, const QString &organization,
  120.               const QString &application = QString());
  121.     QSettings(const QString &fileName, Format format);
  122. #endif
  123.     ~QSettings();
  124.     void clear();
  125.     void sync();
  126.     Status status() const;
  127.     void beginGroup(const QString &prefix);
  128.     void endGroup();
  129.     QString group() const;
  130.     int beginReadArray(const QString &prefix);
  131.     void beginWriteArray(const QString &prefix, int size = -1);
  132.     void endArray();
  133.     void setArrayIndex(int i);
  134.     QStringList allKeys() const;
  135.     QStringList childKeys() const;
  136.     QStringList childGroups() const;
  137.     bool isWritable() const;
  138.     void setValue(const QString &key, const QVariant &value);
  139.     QVariant value(const QString &key, const QVariant &defaultValue = QVariant()) const;
  140.     void remove(const QString &key);
  141.     bool contains(const QString &key) const;
  142.     void setFallbacksEnabled(bool b);
  143.     bool fallbacksEnabled() const;
  144.     QString fileName() const;
  145.     Format format() const;
  146.     Scope scope() const;
  147.     QString organizationName() const;
  148.     QString applicationName() const;
  149.     static void setDefaultFormat(Format format);
  150.     static Format defaultFormat();
  151.     static void setSystemIniPath(const QString &dir); // ### remove in 5.0 (use setPath() instead)
  152.     static void setUserIniPath(const QString &dir);   // ### remove in 5.0 (use setPath() instead)
  153.     static void setPath(Format format, Scope scope, const QString &path);
  154.     typedef QMap<QString, QVariant> SettingsMap;
  155.     typedef bool (*ReadFunc)(QIODevice &device, SettingsMap &map);
  156.     typedef bool (*WriteFunc)(QIODevice &device, const SettingsMap &map);
  157.     static Format registerFormat(const QString &extension, ReadFunc readFunc, WriteFunc writeFunc,
  158.                                  Qt::CaseSensitivity caseSensitivity = Qt::CaseSensitive);
  159. #ifdef QT3_SUPPORT
  160.     inline QT3_SUPPORT bool writeEntry(const QString &key, bool value)
  161.     { setValue(key, value); return isWritable(); }
  162.     inline QT3_SUPPORT bool writeEntry(const QString &key, double value)
  163.     { setValue(key, value); return isWritable(); }
  164.     inline QT3_SUPPORT bool writeEntry(const QString &key, int value)
  165.     { setValue(key, value); return isWritable(); }
  166.     inline QT3_SUPPORT bool writeEntry(const QString &key, const char *value)
  167.     { setValue(key, QString::fromAscii(value)); return isWritable(); }
  168.     inline QT3_SUPPORT bool writeEntry(const QString &key, const QString &value)
  169.     { setValue(key, value); return isWritable(); }
  170.     inline QT3_SUPPORT bool writeEntry(const QString &key, const QStringList &value)
  171.     { setValue(key, value); return isWritable(); }
  172.     inline QT3_SUPPORT bool writeEntry(const QString &key, const QStringList &value, QChar separator)
  173.     { setValue(key, value.join(QString(separator))); return isWritable(); }
  174.     inline QT3_SUPPORT QStringList readListEntry(const QString &key, bool *ok = 0)
  175.     {
  176.         if (ok)
  177.             *ok = contains(key);
  178.         return value(key).toStringList();
  179.     }
  180.     inline QT3_SUPPORT QStringList readListEntry(const QString &key, QChar separator, bool *ok = 0)
  181.     {
  182.         if (ok)
  183.             *ok = contains(key);
  184.         QString str = value(key).toString();
  185.         if (str.isEmpty())
  186.             return QStringList();
  187.         return str.split(separator);
  188.     }
  189.     inline QT3_SUPPORT QString readEntry(const QString &key, const QString &defaultValue = QString(),
  190.                                          bool *ok = 0)
  191.     {
  192.         if (ok)
  193.             *ok = contains(key);
  194.         return value(key, defaultValue).toString();
  195.     }
  196.     inline QT3_SUPPORT int readNumEntry(const QString &key, int defaultValue = 0, bool *ok = 0)
  197.     {
  198.         if (ok)
  199.             *ok = contains(key);
  200.         return value(key, defaultValue).toInt();
  201.     }
  202.     inline QT3_SUPPORT double readDoubleEntry(const QString &key, double defaultValue = 0,
  203.                                               bool *ok = 0)
  204.     {
  205.         if (ok)
  206.             *ok = contains(key);
  207.         return value(key, defaultValue).toDouble();
  208.     }
  209.     inline QT3_SUPPORT bool readBoolEntry(const QString &key, bool defaultValue = false,
  210.                                           bool *ok = 0)
  211.     {
  212.         if (ok)
  213.             *ok = contains(key);
  214.         return value(key, defaultValue).toBool();
  215.     }
  216.     inline QT3_SUPPORT bool removeEntry(const QString &key)
  217.     { remove(key); return true; }
  218.     enum System { Unix, Windows, Mac };
  219.     inline QT3_SUPPORT void insertSearchPath(System, const QString &) {}
  220.     inline QT3_SUPPORT void removeSearchPath(System, const QString &) {}
  221.     inline QT3_SUPPORT void setPath(const QString &organization, const QString &application,
  222.                                     Scope scope = Global)
  223.     {
  224.         setPath_helper(scope == Global ? QSettings::SystemScope : QSettings::UserScope,
  225.                        organization, application);
  226.     }
  227.     inline QT3_SUPPORT void resetGroup()
  228.     {
  229.         while (!group().isEmpty())
  230.             endGroup();
  231.     }
  232.     inline QT3_SUPPORT QStringList entryList(const QString &key) const
  233.     {
  234.         QSettings *that = const_cast<QSettings *>(this);
  235.         QStringList result;
  236.         that->beginGroup(key);
  237.         result = that->childKeys();
  238.         that->endGroup();
  239.         return result;
  240.     }
  241.     inline QT3_SUPPORT QStringList subkeyList(const QString &key) const
  242.     {
  243.         QSettings *that = const_cast<QSettings *>(this);
  244.         QStringList result;
  245.         that->beginGroup(key);
  246.         result = that->childGroups();
  247.         that->endGroup();
  248.         return result;
  249.     }
  250. #endif
  251. protected:
  252. #ifndef QT_NO_QOBJECT
  253.     bool event(QEvent *event);
  254. #endif
  255. private:
  256. #ifdef QT3_SUPPORT
  257.     void setPath_helper(Scope scope, const QString &organization, const QString &application);
  258. #endif
  259.     Q_DISABLE_COPY(QSettings)
  260. };
  261. QT_END_NAMESPACE
  262. #endif // QT_NO_SETTINGS
  263. QT_END_HEADER
  264. #endif // QSETTINGS_H