Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. Qt Development
  3. Mobile and Embedded
  4. qsetting array
Forum Updated to NodeBB v4.3 + New Features

qsetting array

Scheduled Pinned Locked Moved Solved Mobile and Embedded
24 Posts 4 Posters 12.6k Views 2 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.
  • S sandycoolxyz

    Yes I tried this.
    Everything went fine. It creates a .ini where the array gets stored.
    But after reboot or power shutdown, the file is still present but it is always empty.

         QSettings settings("/opt/example.ini",QSettings::IniFormat);
        settings.beginWriteArray("arrayvalue");
        settings.setArrayIndex(index);
        settings.setValue("id",value);
        settings.sync();
        settings.endArray();
    

    But after reboot the file is always empty.

    Before the reboot the example.ini is created and stored properly.

    [arrayvalue]
    1\id=4
    2\id=15
    3\id=99
    size=3
    

    But after reboot, it is empty.

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

    @sandycoolxyz said in qsetting array:

    /opt/example.ini

    /opt is not writeable by non-root users - do you execute your app as root?

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

    1 Reply Last reply
    0
    • SGaistS Offline
      SGaistS Offline
      SGaist
      Lifetime Qt Champion
      wrote on last edited by
      #5

      Hi,

      To add to @jsulm, configuration files have expected places in each OS. You should consider using QStandardPaths to get the correct folder. The QStandardPaths::ConfigLocation would likely be fitting in your case.

      Interested in AI ? www.idiap.ch
      Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

      jsulmJ 1 Reply Last reply
      0
      • SGaistS SGaist

        Hi,

        To add to @jsulm, configuration files have expected places in each OS. You should consider using QStandardPaths to get the correct folder. The QStandardPaths::ConfigLocation would likely be fitting in your case.

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

        @SGaist @sandycoolxyz Yes, on UNIX/Linux /etc is used for global configuration /opt is the wrong location for this.

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

        S 1 Reply Last reply
        0
        • S Offline
          S Offline
          sandycoolxyz
          wrote on last edited by
          #7

          no i am not running as root.
          So where should I be saving it ?

          jsulmJ 1 Reply Last reply
          0
          • S sandycoolxyz

            no i am not running as root.
            So where should I be saving it ?

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

            @sandycoolxyz It depends. Is it per user config file? If so then in /home/USER_NAME/.NAME_OF_YOUR_APP (usually on Linux config files do not have any file extension). If you want to have it globally (but not editable by normal users) then in /etc/NAME_OF_YOUR_APP
            You can find some information here https://en.wikipedia.org/wiki/Filesystem_Hierarchy_Standard

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

            1 Reply Last reply
            0
            • jsulmJ jsulm

              @SGaist @sandycoolxyz Yes, on UNIX/Linux /etc is used for global configuration /opt is the wrong location for this.

              S Offline
              S Offline
              sandycoolxyz
              wrote on last edited by
              #9

              @jsulm said in qsetting array:

              @SGaist @sandycoolxyz Yes, on UNIX/Linux /etc is used for global configuration /opt is the wrong location for this.

              I tried on /etc as well.
              But after power cycle it doesn't retain.

              1 Reply Last reply
              0
              • SGaistS Offline
                SGaistS Offline
                SGaist
                Lifetime Qt Champion
                wrote on last edited by
                #10

                /etc is not editable by normal user and is used for system and service configuration so a standard application usually doesn't put anything there.

                What is your use case ?

                Interested in AI ? www.idiap.ch
                Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

                1 Reply Last reply
                1
                • S Offline
                  S Offline
                  sandycoolxyz
                  wrote on last edited by
                  #11

                  I'm trying to make the linux machine remember certain values after a power cycle.
                  As I said, the values are getting written but after power cycle it loses.
                  I have no clue on proceeding further.

                  jsulmJ 1 Reply Last reply
                  0
                  • S sandycoolxyz

                    I'm trying to make the linux machine remember certain values after a power cycle.
                    As I said, the values are getting written but after power cycle it loses.
                    I have no clue on proceeding further.

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

                    @sandycoolxyz Again: do you want this config file to be user specific? So, shall each user have its own config file? You first need to decide on these.
                    Actually it is not possible that you can write as normal user (without sudo) in /etc. Already opening the file in write mode should fail. Are you doing this on your PC/laptop?

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

                    1 Reply Last reply
                    0
                    • S Offline
                      S Offline
                      sandycoolxyz
                      wrote on last edited by
                      #13

                      It need not be user specific.

                      jsulmJ 1 Reply Last reply
                      0
                      • S sandycoolxyz

                        It need not be user specific.

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

                        @sandycoolxyz Then use /home/USER_NAME/.YOUR_APP_NAME
                        For example: /home/sandycoolxyz/.my_app
                        The dot in front of my_app is important - it tells the system that the file is hidden (config files in user home directory are usually hidden).

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

                        S 1 Reply Last reply
                        0
                        • SGaistS Offline
                          SGaistS Offline
                          SGaist
                          Lifetime Qt Champion
                          wrote on last edited by
                          #15

                          Quoting myself:
                          @SGaist said in qsetting array:

                          You should consider using QStandardPaths to get the correct folder. The QStandardPaths::ConfigLocation would likely be fitting in your case.

                          You'll then have your configuration file at the correct place whatever the OS you plan to support.

                          Interested in AI ? www.idiap.ch
                          Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

                          S 1 Reply Last reply
                          0
                          • SGaistS Offline
                            SGaistS Offline
                            SGaist
                            Lifetime Qt Champion
                            wrote on last edited by
                            #16

                            Or use the second Settings constructor which takes a format and a scope. And it will all handle by itself.

                            Interested in AI ? www.idiap.ch
                            Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

                            1 Reply Last reply
                            0
                            • jsulmJ jsulm

                              @sandycoolxyz Then use /home/USER_NAME/.YOUR_APP_NAME
                              For example: /home/sandycoolxyz/.my_app
                              The dot in front of my_app is important - it tells the system that the file is hidden (config files in user home directory are usually hidden).

                              S Offline
                              S Offline
                              sandycoolxyz
                              wrote on last edited by
                              #17

                              @jsulm
                              /home/user/ ..
                              these are ROM. so can't write.

                              jsulmJ 1 Reply Last reply
                              0
                              • S sandycoolxyz

                                @jsulm
                                /home/user/ ..
                                these are ROM. so can't write.

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

                                @sandycoolxyz ROM? How are you going to use this device? Do you really have many users there? What are the writeable locations/partitions?

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

                                1 Reply Last reply
                                0
                                • S Offline
                                  S Offline
                                  sandycoolxyz
                                  wrote on last edited by
                                  #19

                                  The root file system is a read-only file system (SquashFS), so changing files in the root file system is not supported. In addition the directories /etc, /var and /tmp are relocated to writeable RAM at startup to allow data logging and configuration adjustment during runtime. Changes are not written back to NAND Flash and became destroyed at reboot. To change the standard configuration at every start (e.g. enable Ethernet interface), user startup scripts can be created and stored in writeable NAND Flash area.
                                  For persistent data storage a separate partition was created in NAND flash. This partition is mounted to /opt at every startup of the device. The subdirectories /opt/etc and /opt/share are created automatically by the operating system and held persistent configuration data (e.g. touch screen calibration data) and the font directory. Own data can be stored anywhere else in directory /opt.

                                  jsulmJ 1 Reply Last reply
                                  0
                                  • SGaistS SGaist

                                    Quoting myself:
                                    @SGaist said in qsetting array:

                                    You should consider using QStandardPaths to get the correct folder. The QStandardPaths::ConfigLocation would likely be fitting in your case.

                                    You'll then have your configuration file at the correct place whatever the OS you plan to support.

                                    S Offline
                                    S Offline
                                    sandycoolxyz
                                    wrote on last edited by
                                    #20

                                    @SGaist said in qsetting array:

                                    QStandardPaths::ConfigLocation

                                    #include <QStandardPaths> is from qt5.0 only.

                                    1 Reply Last reply
                                    0
                                    • S sandycoolxyz

                                      The root file system is a read-only file system (SquashFS), so changing files in the root file system is not supported. In addition the directories /etc, /var and /tmp are relocated to writeable RAM at startup to allow data logging and configuration adjustment during runtime. Changes are not written back to NAND Flash and became destroyed at reboot. To change the standard configuration at every start (e.g. enable Ethernet interface), user startup scripts can be created and stored in writeable NAND Flash area.
                                      For persistent data storage a separate partition was created in NAND flash. This partition is mounted to /opt at every startup of the device. The subdirectories /opt/etc and /opt/share are created automatically by the operating system and held persistent configuration data (e.g. touch screen calibration data) and the font directory. Own data can be stored anywhere else in directory /opt.

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

                                      @sandycoolxyz That explains the behaviour you described.
                                      But it doesn't tell anything about /home - is it on its own partition?
                                      For global configuration you can use /opt/etc
                                      "Own data can be stored anywhere else in directory /opt." - you should check the access rights there.

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

                                      1 Reply Last reply
                                      0
                                      • SGaistS Offline
                                        SGaistS Offline
                                        SGaist
                                        Lifetime Qt Champion
                                        wrote on last edited by
                                        #22

                                        My bad, I forgot about the version you are using. Then it would be QDesktopService::storageLocation.

                                        On a side note, if you are locked to Qt 4, please consider 4.8.7 which is the latest and last version of the Qt 4 series.

                                        Interested in AI ? www.idiap.ch
                                        Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

                                        1 Reply Last reply
                                        0
                                        • S Offline
                                          S Offline
                                          sandycoolxyz
                                          wrote on last edited by
                                          #23
                                          QSettings settings("/opt/example.ini",QSettings::IniFormat);
                                          settings.beginWriteArray("arrayvalue");
                                          settings.setArrayIndex(index);
                                          settings.setValue("id",value);
                                          settings.endArray();
                                          settings.sync();
                                          QProcess::execute( "/bin/sync" );
                                          

                                          I tried lot of things and this seems to work. But I did not understand why exactly.
                                          Anyways thanks for you support.

                                          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