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. QSettings object not overwriting the existing group's key value, creates [General] and stores data, how to make it write on the actual location in the .ini file?

QSettings object not overwriting the existing group's key value, creates [General] and stores data, how to make it write on the actual location in the .ini file?

Scheduled Pinned Locked Moved Solved General and Desktop
17 Posts 3 Posters 3.0k 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.
  • raven-worxR raven-worx

    @thippu
    to write a value into a group you need either set the key of the value to group/key
    or you call QSettings::beginGroup() / QSettings::endGroup() before calling QSettings::setValue()

    T Offline
    T Offline
    thippu
    wrote on last edited by thippu
    #3

    @raven-worx
    you are not got what my problem is,
    Groups have been created initially using code:

    {
            iniSettings->beginGroup(group);
            QTreeWidgetItem &rootaddress=createRoot(group); //it creates group text as node on QTreeWidget object.
             foreach( QString key, iniSettings->childKeys() )
             {
                    QVariant val = iniSettings->value(key);
                    createChild(rootaddress,key,val); //adds key and value of the group as the child nodes to the QTreeWidget using 
                    rootaddress.
             }
         iniSettings->endGroup();
    } 
    

    Now if a user changes(or edits) any value on the QTreeWidgetItem on QTreeWidget object, I want update this values to existing group key/value in the QSetting and the .ini file ,

    raven-worxR 1 Reply Last reply
    0
    • T thippu

      @raven-worx
      you are not got what my problem is,
      Groups have been created initially using code:

      {
              iniSettings->beginGroup(group);
              QTreeWidgetItem &rootaddress=createRoot(group); //it creates group text as node on QTreeWidget object.
               foreach( QString key, iniSettings->childKeys() )
               {
                      QVariant val = iniSettings->value(key);
                      createChild(rootaddress,key,val); //adds key and value of the group as the child nodes to the QTreeWidget using 
                      rootaddress.
               }
           iniSettings->endGroup();
      } 
      

      Now if a user changes(or edits) any value on the QTreeWidgetItem on QTreeWidget object, I want update this values to existing group key/value in the QSetting and the .ini file ,

      raven-worxR Offline
      raven-worxR Offline
      raven-worx
      Moderators
      wrote on last edited by
      #4

      @thippu said in QSettings object not overwriting the existing group's key value, creates [General] and stores data, how to make it write on the actual location in the .ini file?:

      Now if a user changes(or edits) any value on the QTreeWidgetItem on QTreeWidget object, I want update this values to existing group key/value in the QSetting and the .ini file

      yes, and why is my advise wrong here?!

      --- SUPPORT REQUESTS VIA CHAT WILL BE IGNORED ---
      If you have a question please use the forum so others can benefit from the solution in the future

      T 2 Replies Last reply
      0
      • raven-worxR raven-worx

        @thippu said in QSettings object not overwriting the existing group's key value, creates [General] and stores data, how to make it write on the actual location in the .ini file?:

        Now if a user changes(or edits) any value on the QTreeWidgetItem on QTreeWidget object, I want update this values to existing group key/value in the QSetting and the .ini file

        yes, and why is my advise wrong here?!

        T Offline
        T Offline
        thippu
        wrote on last edited by
        #5

        @raven-worx iniSettings has been populated by group names using .ini file already, So why to call again QSettings::beginGroup.
        Or maybe I did not get what you are saying.

        raven-worxR 1 Reply Last reply
        0
        • raven-worxR raven-worx

          @thippu said in QSettings object not overwriting the existing group's key value, creates [General] and stores data, how to make it write on the actual location in the .ini file?:

          Now if a user changes(or edits) any value on the QTreeWidgetItem on QTreeWidget object, I want update this values to existing group key/value in the QSetting and the .ini file

          yes, and why is my advise wrong here?!

          T Offline
          T Offline
          thippu
          wrote on last edited by
          #6

          @raven-worx , I did not get this

          to write a value into a group you need either set the key of the value to group/key

          1 Reply Last reply
          0
          • T thippu

            @raven-worx iniSettings has been populated by group names using .ini file already, So why to call again QSettings::beginGroup.
            Or maybe I did not get what you are saying.

            raven-worxR Offline
            raven-worxR Offline
            raven-worx
            Moderators
            wrote on last edited by raven-worx
            #7

            @thippu said in QSettings object not overwriting the existing group's key value, creates [General] and stores data, how to make it write on the actual location in the .ini file?:

            So why to call again QSettings::beginGroup.

            because this sets the group to read/write from (if you do not specify the group in the key path already).

            There are the 2 following ways to read the key mykey from the group mygroup

            iniSettings->beginGroup("mygroup");
            QVariant val = iniSettings->value("mykey");
            iniSettings->endGroup();
            
            QVariant val = iniSettings->value("mygroup/mykey");
            

            --- SUPPORT REQUESTS VIA CHAT WILL BE IGNORED ---
            If you have a question please use the forum so others can benefit from the solution in the future

            T 1 Reply Last reply
            4
            • T Offline
              T Offline
              thippu
              wrote on last edited by
              #8

              @raven-worx , I think I got it.
              my current key/value stored in QTreeWidgetItem and this is attached root node, root node contains the group name.
              how to get parent node text using current QTreeWidgetItem?

              raven-worxR 1 Reply Last reply
              0
              • T thippu

                @raven-worx , I think I got it.
                my current key/value stored in QTreeWidgetItem and this is attached root node, root node contains the group name.
                how to get parent node text using current QTreeWidgetItem?

                raven-worxR Offline
                raven-worxR Offline
                raven-worx
                Moderators
                wrote on last edited by
                #9

                @thippu said in QSettings object not overwriting the existing group's key value, creates [General] and stores data, how to make it write on the actual location in the .ini file?:

                how to get parent node text using current QTreeWidgetItem?

                QTreeWidgetItem::parent()

                --- SUPPORT REQUESTS VIA CHAT WILL BE IGNORED ---
                If you have a question please use the forum so others can benefit from the solution in the future

                T 1 Reply Last reply
                4
                • raven-worxR raven-worx

                  @thippu said in QSettings object not overwriting the existing group's key value, creates [General] and stores data, how to make it write on the actual location in the .ini file?:

                  So why to call again QSettings::beginGroup.

                  because this sets the group to read/write from (if you do not specify the group in the key path already).

                  There are the 2 following ways to read the key mykey from the group mygroup

                  iniSettings->beginGroup("mygroup");
                  QVariant val = iniSettings->value("mykey");
                  iniSettings->endGroup();
                  
                  QVariant val = iniSettings->value("mygroup/mykey");
                  
                  T Offline
                  T Offline
                  thippu
                  wrote on last edited by
                  #10

                  okay, but my group name is dynamic.

                  iniSettings->beginGroup("mygroup");
                  QVariant val = iniSettings->value("mykey");
                  iniSettings->endGroup();
                  
                  QVariant val = iniSettings->value("mygroup/mykey");
                  
                  1 Reply Last reply
                  0
                  • raven-worxR raven-worx

                    @thippu said in QSettings object not overwriting the existing group's key value, creates [General] and stores data, how to make it write on the actual location in the .ini file?:

                    how to get parent node text using current QTreeWidgetItem?

                    QTreeWidgetItem::parent()

                    T Offline
                    T Offline
                    thippu
                    wrote on last edited by
                    #11

                    @raven-worx
                    I did

                     void Widget::itemChanged(QTreeWidgetItem *item,int col)
                    {
                    QTreeWidgetItem *parent=item->parent();
                    qDebug()<<parent->text(0);//App is getting crashed here, do not know why? how to get text from this root?
                    raven-worxR 1 Reply Last reply
                    0
                    • T thippu

                      @raven-worx
                      I did

                       void Widget::itemChanged(QTreeWidgetItem *item,int col)
                      {
                      QTreeWidgetItem *parent=item->parent();
                      qDebug()<<parent->text(0);//App is getting crashed here, do not know why? how to get text from this root?
                      raven-worxR Offline
                      raven-worxR Offline
                      raven-worx
                      Moderators
                      wrote on last edited by
                      #12

                      @thippu
                      probably because parent is a NULL pointer when you call this piece of code for all your items.
                      Your root items of course do not have a parent item.

                      --- SUPPORT REQUESTS VIA CHAT WILL BE IGNORED ---
                      If you have a question please use the forum so others can benefit from the solution in the future

                      T 1 Reply Last reply
                      4
                      • raven-worxR raven-worx

                        @thippu
                        probably because parent is a NULL pointer when you call this piece of code for all your items.
                        Your root items of course do not have a parent item.

                        T Offline
                        T Offline
                        thippu
                        wrote on last edited by
                        #13

                        @raven-worx
                        like below I'm doing to create nodes and children.

                         QTreeWidgetItem& Widget::createRoot(const QString &groupname)
                        {
                           QTreeWidgetItem *root=new QTreeWidgetItem(displayTreeWidget);//here parameter is QTreeWidget
                           root->setText(0,groupname);
                          displayTreeWidget->addTopLevelItem(root);
                        return *root;
                        }
                        
                        //method to create children and attach them to toplevelitem
                        void Widget::createChild(QTreeWidgetItem &rootaddress,const QString &key,const QVariant &value)
                        {
                          QTreeWidgetItem *child=new QTreeWidgetItem;
                         child->setText(0,key);
                        child->setTextAlignment(0,Qt::AlignCenter);
                        child->setData(1,2,value);
                        rootaddress.addChild(child);
                        }
                        //these two methods are called while initial group creation
                        //mentioned with bold text in the code below
                        

                        Groups have been created initially using code:

                        {
                                iniSettings->beginGroup(group);
                                QTreeWidgetItem &rootaddress=**createRoot(group);** //it creates group text as node on QTreeWidget object.
                                 foreach( QString key, iniSettings->childKeys() )
                                 {
                                        QVariant val = iniSettings->value(key);
                                        ***createChild(rootaddress,key,val); *** /adds key and value of the group as the child nodes to the QTreeWidget using 
                                        rootaddress.
                                 }
                             iniSettings->endGroup();
                        } 
                        

                        Now if a user changes(or edits) any value on the QTreeWidgetItem on QTreeWidget object, I want update this values to existing group key/value in the QSetting and the .ini file ,

                        jsulmJ 1 Reply Last reply
                        0
                        • T thippu

                          @raven-worx
                          like below I'm doing to create nodes and children.

                           QTreeWidgetItem& Widget::createRoot(const QString &groupname)
                          {
                             QTreeWidgetItem *root=new QTreeWidgetItem(displayTreeWidget);//here parameter is QTreeWidget
                             root->setText(0,groupname);
                            displayTreeWidget->addTopLevelItem(root);
                          return *root;
                          }
                          
                          //method to create children and attach them to toplevelitem
                          void Widget::createChild(QTreeWidgetItem &rootaddress,const QString &key,const QVariant &value)
                          {
                            QTreeWidgetItem *child=new QTreeWidgetItem;
                           child->setText(0,key);
                          child->setTextAlignment(0,Qt::AlignCenter);
                          child->setData(1,2,value);
                          rootaddress.addChild(child);
                          }
                          //these two methods are called while initial group creation
                          //mentioned with bold text in the code below
                          

                          Groups have been created initially using code:

                          {
                                  iniSettings->beginGroup(group);
                                  QTreeWidgetItem &rootaddress=**createRoot(group);** //it creates group text as node on QTreeWidget object.
                                   foreach( QString key, iniSettings->childKeys() )
                                   {
                                          QVariant val = iniSettings->value(key);
                                          ***createChild(rootaddress,key,val); *** /adds key and value of the group as the child nodes to the QTreeWidget using 
                                          rootaddress.
                                   }
                               iniSettings->endGroup();
                          } 
                          

                          Now if a user changes(or edits) any value on the QTreeWidgetItem on QTreeWidget object, I want update this values to existing group key/value in the QSetting and the .ini file ,

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

                          @thippu Again: a root node does NOT have a parent.

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

                          T 1 Reply Last reply
                          0
                          • jsulmJ jsulm

                            @thippu Again: a root node does NOT have a parent.

                            T Offline
                            T Offline
                            thippu
                            wrote on last edited by thippu
                            #15

                            @jsulm I'm stuck here if I find the group name I can complete this, don't know how to fix it help me.

                            raven-worxR 1 Reply Last reply
                            0
                            • T thippu

                              @jsulm I'm stuck here if I find the group name I can complete this, don't know how to fix it help me.

                              raven-worxR Offline
                              raven-worxR Offline
                              raven-worx
                              Moderators
                              wrote on last edited by raven-worx
                              #16

                              @thippu
                              assuming your tree widget only has 1 sub-level a simple check can be:

                              QTreeWidgetItem* item = ...;
                              if( QTreeWidgetItem* parent = item->parent() )
                              {
                                   // item is a child (= key)
                                   QString keyPath = QString("%1/%2").arg(parent->text(0)).arg(item->text(0));
                                   QVariant val = iniSettings->value( keyPath ); // reading
                                   iniSettings->setValue( keyPath, val ); // writing
                              }
                              else
                              {
                                   // item is a root item (= group)
                              }
                              

                              --- SUPPORT REQUESTS VIA CHAT WILL BE IGNORED ---
                              If you have a question please use the forum so others can benefit from the solution in the future

                              T 1 Reply Last reply
                              3
                              • raven-worxR raven-worx

                                @thippu
                                assuming your tree widget only has 1 sub-level a simple check can be:

                                QTreeWidgetItem* item = ...;
                                if( QTreeWidgetItem* parent = item->parent() )
                                {
                                     // item is a child (= key)
                                     QString keyPath = QString("%1/%2").arg(parent->text(0)).arg(item->text(0));
                                     QVariant val = iniSettings->value( keyPath ); // reading
                                     iniSettings->setValue( keyPath, val ); // writing
                                }
                                else
                                {
                                     // item is a root item (= group)
                                }
                                
                                T Offline
                                T Offline
                                thippu
                                wrote on last edited by thippu
                                #17

                                @raven-worx it is working perfectly, Awesome.
                                Thanks a lot.

                                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