Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt
  • Unsolved
Collapse
qtws26_logo

The Qt Event of the Year: Qt World Summit 2026

Save Your Spot >
Brand Logo
  1. Home
  2. Qt Development
  3. General and Desktop
  4. How to create a class based on QSettings
Qt 6.12 LTS is out! See what's new in the release blog

How to create a class based on QSettings

Scheduled Pinned Locked Moved Solved General and Desktop
13 Posts 6 Posters 7.4k Views 1 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • mrjjM Offline
    mrjjM Offline
    mrjj
    Lifetime Qt Champion
    wrote on last edited by
    #2

    Hi
    yes that should be possible.

    Anyway, docs says
    " Constructing and destroying a QSettings object is very fast."

    So you could also just use a function to return a QSettings and in that way hide the
    StandardPaths::writableLocation(QStandardPaths::ConfigLocation); etc

    K 1 Reply Last reply
    3
    • mrjjM mrjj

      Hi
      yes that should be possible.

      Anyway, docs says
      " Constructing and destroying a QSettings object is very fast."

      So you could also just use a function to return a QSettings and in that way hide the
      StandardPaths::writableLocation(QStandardPaths::ConfigLocation); etc

      K Offline
      K Offline
      KelvinSP
      wrote on last edited by KelvinSP
      #3

      @mrjj thanks.

      Do you mean something like this?

      QSettings *mySettings()
      {
          QString path = QStandardPaths::writableLocation(QStandardPaths::ConfigLocation);
          QSettings *settings = new QSettings(path + "/Settings.ini", QSettings::IniFormat);
          return settings;
      }
      
      QSettings *ptSettings = mySettings();
      ptSettings->beginGroup("Test");
      ptSettings->setValue("Value", 3);
      ptSettings->endGroup();
      
      delete ptSettings;
      

      It seems to work.

      1 Reply Last reply
      0
      • hskoglundH Offline
        hskoglundH Offline
        hskoglund
        wrote on last edited by hskoglund
        #4

        Hi, also, instead of inheriting from QSettings, you could construct your own class with an encapsulated QSettings*, say something like this:

        class MySettings
        {
            QSettings* pSettings;
        
            MySettings() : MySettings(QStandardPaths::writableLocation(QStandardPaths::ConfigLocation) + "/Settings.ini") { }
            MySettings(QString sIniFileName) { pSettings = new QSettings(sIniFileName,QSettings::IniFormat); }
            ~MySettings() { delete pSettings; }
        
            void writeInt(QString sKeyName, int nValue) { pSettings->setValue(sKeyName,nValue); }
        }
        

        And to use it, easiest is to declare it as a class instance, say in your MainWindow.h:

        MySettings settings;
        

        and then use it like this:

        settings.writeInt("Test/Value",3);
        
        K 1 Reply Last reply
        1
        • P Offline
          P Offline
          patrik08
          wrote on last edited by patrik08
          #5

          I have a class name document_session as instance:

          /// Header pointer & static:
          
          QPointer<DOC> DOC::_self = 0L;
          
          DOC *DOC::self(QObject *parent) {
            if (!_self)
              _self = new DOC(parent);
            return _self;
          }
          void DOC::setValue(const QString name, QVariant data) {
            QSettings session_s(QString("OasiClub"), QString("OasiEditor"));
            session_s.setValue(name, data);
          }
          
          QVariant DOC::value(const QString name) {
            QSettings session_s(QString("OasiClub"), QString("OasiEditor"));
            return session_s.value(name);
          }
          
          /// after read e write:
          const int uservoice = DOC::self(this)->value("MyVoicePref").toInt();
          

          sample:
          https://github.com/pehohlva/QOASIS/blob/master/src/app/doc_session.cpp
          https://github.com/pehohlva/QOASIS/blob/master/src/app/doc_session.h

          https://github.com/pehohlva/QOASIS
          https://sourceforge.net/projects/oasidoc/

          1 Reply Last reply
          0
          • hskoglundH hskoglund

            Hi, also, instead of inheriting from QSettings, you could construct your own class with an encapsulated QSettings*, say something like this:

            class MySettings
            {
                QSettings* pSettings;
            
                MySettings() : MySettings(QStandardPaths::writableLocation(QStandardPaths::ConfigLocation) + "/Settings.ini") { }
                MySettings(QString sIniFileName) { pSettings = new QSettings(sIniFileName,QSettings::IniFormat); }
                ~MySettings() { delete pSettings; }
            
                void writeInt(QString sKeyName, int nValue) { pSettings->setValue(sKeyName,nValue); }
            }
            

            And to use it, easiest is to declare it as a class instance, say in your MainWindow.h:

            MySettings settings;
            

            and then use it like this:

            settings.writeInt("Test/Value",3);
            
            K Offline
            K Offline
            KelvinSP
            wrote on last edited by
            #6

            @hskoglund thanks. I liked this approach. I will try it out.

            1 Reply Last reply
            0
            • K Offline
              K Offline
              KelvinSP
              wrote on last edited by
              #7

              Just with the purpose of helping someone else, I have implemented the following class based on the @hskoglund answer:

              Header:

              #ifndef MYSETTINGS_H
              #define MYSETTINGS_H
              
              #include <QVariant>
              #include <QSettings>
              #include <QStandardPaths>
              
              class MySettings
              {
              public:
                  MySettings(QString fileName = "", QSettings::Format format = QSettings::IniFormat);
                  ~MySettings();
              
                  void setValue(const QString &key, const QVariant &value);
                  QVariant value(const QString &key, const QVariant &defaultValue = QVariant());
              
                  void beginGroup(const QString &prefix);
                  void endGroup();
              
              private:
                  QSettings *pSettings_;
              };
              
              #endif // MySettings_H
              

              Code:

              #include "mysettings.h"
              
              MySettings::MySettings(QString fileName, QSettings::Format format)
              {
                  if( fileName.isEmpty() )
                  {
                      QString path = QStandardPaths::writableLocation(QStandardPaths::ConfigLocation);
                      fileName = path + "/Settings.ini";
                  }
              
                  pSettings_ = new QSettings(fileName, format);
              }
              
              MySettings::~MySettings()
              {
                  delete pSettings_;
              }
              
              void MySettings::setValue(const QString &key, const QVariant &value)
              {
                  pSettings_->setValue(key, value);
              }
              
              QVariant MySettings::value(const QString &key, const QVariant &defaultValue)
              {
                  return pSettings_->value(key, defaultValue);
              }
              
              void MySettings::beginGroup(const QString &prefix)
              {
                  pSettings_->beginGroup(prefix);
              }
              
              void MySettings::endGroup()
              {
                  pSettings_->endGroup();
              }
              
              1 Reply Last reply
              1
              • P Offline
                P Offline
                patrik08
                wrote on last edited by
                #8

                @KelvinSP said in How to create a class based on QSettings:

                Settings.ini

                hi... only window work on Settings.ini...
                Cross Compatible ?

                mrjjM jsulmJ K 3 Replies Last reply
                0
                • P patrik08

                  @KelvinSP said in How to create a class based on QSettings:

                  Settings.ini

                  hi... only window work on Settings.ini...
                  Cross Compatible ?

                  mrjjM Offline
                  mrjjM Offline
                  mrjj
                  Lifetime Qt Champion
                  wrote on last edited by
                  #9

                  @patrik08
                  Hi
                  http://doc.qt.io/qt-5/qsettings.html#Format-enum
                  "on Unix, this means textual configuration files in INI format."

                  so .ini is not only windows it seems :)

                  1 Reply Last reply
                  1
                  • P patrik08

                    @KelvinSP said in How to create a class based on QSettings:

                    Settings.ini

                    hi... only window work on Settings.ini...
                    Cross Compatible ?

                    jsulmJ Offline
                    jsulmJ Offline
                    jsulm
                    Lifetime Qt Champion
                    wrote on last edited by
                    #10

                    @patrik08 Registry is "Windows only". Ini files can be used on any platform as they are just files.

                    https://forum.qt.io/topic/113070/qt-code-of-conduct

                    1 Reply Last reply
                    0
                    • P patrik08

                      @KelvinSP said in How to create a class based on QSettings:

                      Settings.ini

                      hi... only window work on Settings.ini...
                      Cross Compatible ?

                      K Offline
                      K Offline
                      KelvinSP
                      wrote on last edited by KelvinSP
                      #11

                      @patrik08 as @jsulm mentioned INI files can be used on any platform. I personally use it on Windows and OS X.

                      1 Reply Last reply
                      0
                      • P Offline
                        P Offline
                        patrik08
                        wrote on last edited by
                        #12

                        ok...
                        super...
                        QSettings::setDefaultFormat (QSettings::IniFormat )
                        any time..

                        1 Reply Last reply
                        0
                        • JonBJ Offline
                          JonBJ Offline
                          JonB
                          wrote on last edited by
                          #13

                          @KelvinSP said in How to create a class based on QSettings:

                          Just with the purpose of helping someone else, I have implemented the following class based on the @hskoglund answer

                          Just my 2 cents, but I don't understand why you would choose to encapsulate in this case rather than derive. Most of your code seems to act on the encapsulated QSettings object anyway, so I would see derivation as more natural (e.g. with derivation you can override or call protected members, with encapsulation you cannot). Not meant as a criticism, there are often pros & cons, up to you.

                          1 Reply Last reply
                          0

                          • Login

                          • Login or register to search.
                          • First post
                            Last post
                          0
                          • Categories
                          • Recent
                          • Tags
                          • Popular
                          • Users
                          • Groups
                          • Search
                          • Get Qt
                          • Unsolved