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. Using .INI file[SOLVED]
Forum Updated to NodeBB v4.3 + New Features

Using .INI file[SOLVED]

Scheduled Pinned Locked Moved General and Desktop
33 Posts 5 Posters 14.6k 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.
  • R Offline
    R Offline
    Robbin
    wrote on last edited by
    #23

    @
    if (i = 1){
    int index = ui->comboBox->findData(calfactor);
    ui->comboBox->setCurrentIndex(index);
    } break;
    @
    You break the loop before the int i can get another value. You loop is poorly constructed as well.....

    In my opinion you should listen to what Volker said and go back to some more basic stuff first.....

    1 Reply Last reply
    0
    • O Offline
      O Offline
      ogopa
      wrote on last edited by
      #24

      [quote author="Eus" date="1314127853"]@
      if (i = 1){
      int index = ui->comboBox->findData(calfactor);
      ui->comboBox->setCurrentIndex(index);
      } break;
      @
      You break the loop before the int i can get another value. In my opinion you should listen to what Volker said and go back to some more basic stuff first.....[/quote]

      Thanks, i saw that and had fixed it. But, it wouldn't work anyway because of the first problem i stated which was, there is no option for "Board2" being added to my QComboBox, only "Board1". I'm confused as to why that is because my loop says from 1 till less than 3, which should include Board1 and Board2.

      1 Reply Last reply
      0
      • M Offline
        M Offline
        mlong
        wrote on last edited by
        #25

        You have two errors in the code:

        The "break" statements are exiting the loop early

        You are using if (i = 1) instead of if (i == 1) in your if statements.

        Software Engineer
        My views and opinions do not necessarily reflect those of anyone -- living or dead, real or fictional -- in this universe or any other similar multiverse node. Void where prohibited. Your mileage may vary. Caveat emptor.

        1 Reply Last reply
        0
        • R Offline
          R Offline
          Robbin
          wrote on last edited by
          #26

          I am actually amazed it works. Do you have the variable i declared somewhere in the app? Because of your "for" loop, your app shouldn't start at all (having "i" with no type).
          I think your app does exactly what your code suggests it to do.

          P.S. There is a better way to get the values and values count from QSettings. Read the documentation to get familiar with it.

          1 Reply Last reply
          0
          • A Offline
            A Offline
            andre
            wrote on last edited by
            #27
            • What are the breaks doing on lines 12 and 13 of your code? First you exit the foreach loop, and then you complain that it doesn't read all your values?
            • Why do you set the value of your line edit for each of the values you encounter in the values group of your settings file? What is that supposed to yield you?
            1 Reply Last reply
            0
            • O Offline
              O Offline
              ogopa
              wrote on last edited by
              #28

              [quote author="Andre" date="1314164692"]* What are the breaks doing on lines 12 and 13 of your code? First you exit the foreach loop, and then you complain that it doesn't read all your values?

              • Why do you set the value of your line edit for each of the values you encounter in the values group of your settings file? What is that supposed to yield you?[/quote]
                Sorry, I got rid of all the breaks. Assigning the value to lineEdit was irrelevant, it just display the value gotten from the ini file into the lineEdit.

              [quote author="mlong" date="1314128549"]You have two errors in the code:

              The "break" statements are exiting the loop early

              You are using if (i = 1) instead of if (i == 1) in your if statements.[/quote]

              Thanks, i got rid of the break statements and i changed = to ==. It displays both boards now.:)
              I modified my .ini file(below). I am getting two values from my .ini file, 8.56 and 15. I am trying to assign "Board1" the first value(8.56) and "Board2" the second value(15) with the code below. However, it is only assigning the second value(15) to both Board1 and Board2. Why is this?

              output from the qdebug statements are below aswell.

              new .ini file:
              @[values]
              1 = 8.56
              2 =15@

              code:
              @ for(i = 1; i < 3; i++){
              ui->comboBox->addItem("Board"+QString::number(i));

              QSettings settings("/home/test/Documents/Wave/signalgenerator.ini", QSettings::IniFormat);
              qDebug() << settings.allKeys();//qdebug
              
              settings.beginGroup("values");
              const QStringList childKeys = settings.childKeys();
              QHash<QString, QString> values;
              foreach (const QString &childKey, childKeys) {
              
              qDebug() << childKey << "->" << settings.value(childKey).toString();//qdebug
              values.insert(childKey, settings.value(childKey).toString());
              
                 if (childKey.toInt() == 1) {
              
                  calfactor = settings.value(childKey).toFloat();
                  ui->comboBox->setItemData(0, calfactor);
              

              qDebug()<<"index:" << ui->comboBox->itemText(1)<<" value:"<<ui->comboBox->itemData(1);//qdebug
              }

              if (childKey.toInt() == 2) {
              
                  calfactor = settings.value(childKey).toFloat();
                  ui->comboBox->setItemData(1, calfactor);
                  qDebug()<<"index:" << ui->comboBox->itemText(1)<<"    value:"<<ui->comboBox->itemData(1);//qdebug
              }
              

              }
              settings.endGroup();
              qDebug() << "values hash:" << values;//qdebug

              @

              Output from qdebug statements:
              @("values/1", "values/2")
              "1" -> "8.56"
              index: "Board1" value: QVariant(float, 8.56)
              "2" -> "15"
              index: "Board2" value: QVariant(float, 15)
              values hash: QHash(("1", "8.56")("2", "15")) @

              1 Reply Last reply
              0
              • M Offline
                M Offline
                mlong
                wrote on last edited by
                #29

                Your qDebug in line 19 is identical to line 26.

                Nonetheless, I can't see from the output of your qDebug statements where things appear to be incorrect. The output you show would indicate that, despite the creative design of your .ini file, you are getting the right data into boards 1 and 2.

                As an aside, you may be better off with an ini format such as:
                @
                [Board1]
                value=8.56

                [Board2]
                value=15
                @

                And you could make a much cleaner implementation. Something like:
                @
                QSettings settings("/home/test/Documents/Wave/signalgenerator.ini",
                QSettings::IniFormat);

                QHash<QString, QString> values;

                for(i = 0; i < 2; i++) { // Let's index the loop as if we're C++ developers

                  QString boardname = QString("Board%1").arg(i+1);  
                
                  settings.beginGroup(boardname);
                
                  // Get your value
                  QString value = settings.value("value").toString();
                  values.insert(QString::number(i+1),value);
                  float calfactor = value.toFloat();
                  
                  // Add to your UI
                  ui->comboBox->addItem(boardname);  // Same as the key group name, so reuse it
                  ui->comboBox->setItemData(i, calfactor);
                  
                  settings.endGroup();
                

                }

                qDebug() << "values hash:" << values;
                @

                (this code has not been tested)

                Software Engineer
                My views and opinions do not necessarily reflect those of anyone -- living or dead, real or fictional -- in this universe or any other similar multiverse node. Void where prohibited. Your mileage may vary. Caveat emptor.

                1 Reply Last reply
                0
                • O Offline
                  O Offline
                  ogopa
                  wrote on last edited by
                  #30

                  As an aside, you may be better off with an ini format such as:
                  @
                  [Board1]
                  value=8.56

                  [Board2]
                  value=15
                  @

                  Thanks alot mlong, I tried your code, it still has the same problem as my old one where whether I choose Board1 or Board2, it still uses the 2nd value(15).

                  Although, I did modify my code and got it working but it is ugly because I have to put my code(below) under every pushButton function that generates a wave.

                  I like yours better and it would make my code alot more simple if i could get yours working so I will experiment with the code you gave me and see if I can get it working.

                  the code that worked for me:
                  @QSettings settings("/home/test/Documents/Wave/signalgenerator.ini", QSettings::IniFormat);
                  settings.beginGroup("values");
                  const QStringList childKeys = settings.childKeys();
                  QHash<QString, QString> values;
                  foreach (const QString &childKey, childKeys) {
                  values.insert(childKey, settings.value(childKey).toString());
                  if (childKey.toInt() == ui->comboBox->currentIndex()+1) {calfactor = settings.value(childKey).toFloat();}
                  }
                  settings.endGroup();@

                  1 Reply Last reply
                  0
                  • M Offline
                    M Offline
                    mlong
                    wrote on last edited by
                    #31

                    I would suspect, then, that your original problem wasn't in reading the values from the ini format, but rather where you were setting the values to the boards themselves. I don't think you had shared that code.

                    Software Engineer
                    My views and opinions do not necessarily reflect those of anyone -- living or dead, real or fictional -- in this universe or any other similar multiverse node. Void where prohibited. Your mileage may vary. Caveat emptor.

                    1 Reply Last reply
                    0
                    • A Offline
                      A Offline
                      andre
                      wrote on last edited by
                      #32

                      To solve the kind of questions of why a snippet of code like you show us does not work as you expect it, please learn to use a debugger. Set a breakpoint at the top of your function, and then step through your function one line at a time. It allows you to follow the programs flow through your function, thus giving you insight in why it doesn't work the way you expect it.

                      1 Reply Last reply
                      0
                      • O Offline
                        O Offline
                        ogopa
                        wrote on last edited by
                        #33

                        [quote author="mlong" date="1314218770"]I would suspect, then, that your original problem wasn't in reading the values from the ini format, but rather where you were setting the values to the boards themselves. I don't think you had shared that code.

                        [/quote]

                        Thnks for all your help so far. You are right, my problem was setting the values to the boards. sorry. I had shared all the code i had for the problem. What I did was I modified this code:
                        @ QSettings settings("/home/test/Documents/Wave/signalgenerator.ini", QSettings::IniFormat);
                        qDebug() << settings.allKeys();//qdebug

                        settings.beginGroup("values");
                        const QStringList childKeys = settings.childKeys();
                        QHash<QString, QString> values;
                        foreach (const QString &childKey, childKeys) {
                        
                        qDebug() << childKey << "->" << settings.value(childKey).toString();//qdebug
                        values.insert(childKey, settings.value(childKey).toString());
                        
                           if (childKey.toInt() == 1) {
                        
                            calfactor = settings.value(childKey).toFloat();
                            ui->comboBox->setItemData(0, calfactor);
                        

                        qDebug()<<"index:" << ui->comboBox->itemText(1)<<" value:"<<ui->comboBox->itemData(1);//qdebug
                        }

                        if (childKey.toInt() == 2) {
                        
                            calfactor = settings.value(childKey).toFloat();
                            ui->comboBox->setItemData(1, calfactor);
                            qDebug()<<"index:" << ui->comboBox->itemText(1)<<"    value:"<<ui->comboBox->itemData(1);//qdebug
                        }
                        

                        }
                        settings.endGroup();
                        qDebug() << "values hash:" << values;//qdebug@

                        to get this one(which worked(but only if I put it under each onpushButton function) :
                        @QSettings settings("/home/test/Documents/Wave/signalgenerator.ini", QSettings::IniFormat);
                        settings.beginGroup("values");
                        const QStringList childKeys = settings.childKeys();
                        QHash<QString, QString> values;
                        foreach (const QString &childKey, childKeys) {
                        values.insert(childKey, settings.value(childKey).toString());
                        if (childKey.toInt() == ui->comboBox->currentIndex()+1) {calfactor = settings.value(childKey).toFloat();}
                        }
                        settings.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