Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. Qt Development
  3. General and Desktop
  4. Reading [General] section in ini-files
Forum Updated to NodeBB v4.3 + New Features

Reading [General] section in ini-files

Scheduled Pinned Locked Moved Solved General and Desktop
16 Posts 4 Posters 2.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.
  • Christian EhrlicherC Online
    Christian EhrlicherC Online
    Christian Ehrlicher
    Lifetime Qt Champion
    wrote on last edited by
    #7

    I still don't understand why you can't copy the file to a temp dir, modify it and read it with Qt...

    Qt Online Installer direct download: https://download.qt.io/official_releases/online_installers/
    Visit the Qt Academy at https://academy.qt.io/catalog

    1 Reply Last reply
    0
    • J.HilkJ J.Hilk

      or, if copying is not possible, why not read it in memory change General there and read it than with QSettings

      surely the file is not Gbytes big ?

      E Offline
      E Offline
      ErikThomsen
      wrote on last edited by
      #8

      @J-Hilk
      No, the files are not huge. And your solution would probably work.
      My own solution will probaby be something similar, such as parsing the [General] section as a text file. All the other sections work as they should.

      I just hoped that someone had found a way to tweak QSettings directly.

      @Christian-Ehrlicher
      In that case, it will be necessary for the software to do this everytime it is used. I find that impratical.

      1 Reply Last reply
      0
      • Christian EhrlicherC Online
        Christian EhrlicherC Online
        Christian Ehrlicher
        Lifetime Qt Champion
        wrote on last edited by Christian Ehrlicher
        #9

        @ErikThomsen said in Reading [General] section in ini-files:

        In that case, it will be necessary for the software to do this everytime it is used. I find that impratical.

        And what's different from your / @J-Hilk's idea? It's a simple class derived from QSettings...

        ok, deriving does not work due to QSettings constraints, ~12 lines of code without error checking...

        class MySettings
        {
        public:
          MySettings(const QString &fn)
          {
            QFile f(fn);
            f.open(QIODevice::ReadOnly);
            QByteArray ba = f.readAll();
            f.close();
            temp.open();
            temp.write(ba.replace("[General]", "[Blub]"));
            temp.close();
            m_settings = new QSettings(temp.fileName(), QSettings::IniFormat);
          }
          ~MySettings()
          {
            delete m_settings;
          }
          QSettings *settings()
          {
            return m_settings;
          }
        private:
          QSettings *m_settings = nullptr;
          QTemporaryFile temp;
        }
        

        Qt Online Installer direct download: https://download.qt.io/official_releases/online_installers/
        Visit the Qt Academy at https://academy.qt.io/catalog

        E 1 Reply Last reply
        3
        • S Offline
          S Offline
          SimonSchroeder
          wrote on last edited by
          #10

          We let our QSettings write to the default location. So, I don't really know how Windows handles this (the default location on Windows is the registry). But I had a look what Linux does. What I found there is that if I don't specify any group values are put under the section [General]. Maybe the only thing you have to do to read the [General] section is to not use a group. It might be that just for your own group General Qt will put a % in front of the name to distinguish it from the non-group stuff.

          E 1 Reply Last reply
          0
          • Christian EhrlicherC Christian Ehrlicher

            @ErikThomsen said in Reading [General] section in ini-files:

            In that case, it will be necessary for the software to do this everytime it is used. I find that impratical.

            And what's different from your / @J-Hilk's idea? It's a simple class derived from QSettings...

            ok, deriving does not work due to QSettings constraints, ~12 lines of code without error checking...

            class MySettings
            {
            public:
              MySettings(const QString &fn)
              {
                QFile f(fn);
                f.open(QIODevice::ReadOnly);
                QByteArray ba = f.readAll();
                f.close();
                temp.open();
                temp.write(ba.replace("[General]", "[Blub]"));
                temp.close();
                m_settings = new QSettings(temp.fileName(), QSettings::IniFormat);
              }
              ~MySettings()
              {
                delete m_settings;
              }
              QSettings *settings()
              {
                return m_settings;
              }
            private:
              QSettings *m_settings = nullptr;
              QTemporaryFile temp;
            }
            
            E Offline
            E Offline
            ErikThomsen
            wrote on last edited by
            #11

            @Christian-Ehrlicher
            I just need to read some pre-made ini-files. Not modify them.
            But I have solved the issue by reading the ini-file as a text file, and parsing the lines in the [General] section manually.

            1 Reply Last reply
            0
            • Christian EhrlicherC Online
              Christian EhrlicherC Online
              Christian Ehrlicher
              Lifetime Qt Champion
              wrote on last edited by
              #12

              @ErikThomsen said in Reading [General] section in ini-files:

              I just need to read some pre-made ini-files. Not modify them.

              I never said that you should modify them... read my osts and suggestion properly!

              Qt Online Installer direct download: https://download.qt.io/official_releases/online_installers/
              Visit the Qt Academy at https://academy.qt.io/catalog

              E 1 Reply Last reply
              0
              • S SimonSchroeder

                We let our QSettings write to the default location. So, I don't really know how Windows handles this (the default location on Windows is the registry). But I had a look what Linux does. What I found there is that if I don't specify any group values are put under the section [General]. Maybe the only thing you have to do to read the [General] section is to not use a group. It might be that just for your own group General Qt will put a % in front of the name to distinguish it from the non-group stuff.

                E Offline
                E Offline
                ErikThomsen
                wrote on last edited by
                #13

                @SimonSchroeder
                Aaaah! That's interesting!
                Will try it. Thanks!

                Due to the posting frequency limit for newbies, I had plenty om time to try it out.
                It works nicely.

                Instead of

                settings.beginGroup("General");
                

                which accesses [%General], I use

                settings.beginGroup("");
                

                which accesses [General]. The compiler gives me a warning, but that can be ignored.

                S 1 Reply Last reply
                0
                • Christian EhrlicherC Christian Ehrlicher

                  @ErikThomsen said in Reading [General] section in ini-files:

                  I just need to read some pre-made ini-files. Not modify them.

                  I never said that you should modify them... read my osts and suggestion properly!

                  E Offline
                  E Offline
                  ErikThomsen
                  wrote on last edited by
                  #14

                  @Christian-Ehrlicher
                  I apologize for being stupid. If you didn't mean to copy and modify the files, then I simply don't understand your suggestion.

                  In any case, the hint from @SimonSchroeder solved the issue.

                  1 Reply Last reply
                  0
                  • Christian EhrlicherC Online
                    Christian EhrlicherC Online
                    Christian Ehrlicher
                    Lifetime Qt Champion
                    wrote on last edited by
                    #15

                    I use the file, generate a modified temoprary file and use this for QSettings. The temporary file is deleted right after the class gets destructed. So it's the same as @J-Hilk suggested. I never modified the original one so I don't see what's your problem with my suggestion...

                    Qt Online Installer direct download: https://download.qt.io/official_releases/online_installers/
                    Visit the Qt Academy at https://academy.qt.io/catalog

                    1 Reply Last reply
                    1
                    • E ErikThomsen

                      @SimonSchroeder
                      Aaaah! That's interesting!
                      Will try it. Thanks!

                      Due to the posting frequency limit for newbies, I had plenty om time to try it out.
                      It works nicely.

                      Instead of

                      settings.beginGroup("General");
                      

                      which accesses [%General], I use

                      settings.beginGroup("");
                      

                      which accesses [General]. The compiler gives me a warning, but that can be ignored.

                      S Offline
                      S Offline
                      SimonSchroeder
                      wrote on last edited by
                      #16

                      @ErikThomsen said in Reading [General] section in ini-files:

                      I use
                      settings.beginGroup("");

                      which accesses [General]. The compiler gives me a warning, but that can be ignored.

                      I am not sure what the compiler warns about. But, you don't have to start any group. Just drop the beginGroup(...) altogether (and also the corresponding endGroup()).

                      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 Extensions
                      • Unsolved