Saving dial value



  • Hi,
    In my project, there is a second.ui apart from Mainwindow and it has a dial. I set the dial value to a custom value and i close second.ui. when i reopen second ui, it does not save the value that i set before i close it. So i have define a value in "second.h"

    int save ;
    

    Then i write the dial value to "save" before closing the ui;

    void second::on_closeButton_clicked()
    {
        save = ui->dial->value();
        close();
    }
    

    When i reopen the secon.ui , i read the save value and set the dial ;

    ui->setupUi(this);   
    ui->dial->setValue(save);
    

    But i does not set the rigth value , it set the maximum dial value. Where is the error ?


  • Qt Champions 2017

    Hi
    "it set the maximum dial value."

    That sounds odd. You mean that it goes to max value when u set it ?

    Is the save value what you expect if u
    place break point and look at it ?
    or you can
    qDebug() << " save val:" << save;
    before the
    ui->dial->setValue(save);



  • @mrjj said:

    qDebug() << " save val:" << save;

    when i do qDebug i get this value;

    save val: 1991605744
    

    But when i save it, it was between 0 and 100 ?


  • Qt Champions 2017

    @rapid84
    Well, can you show how u save and load it. ?

    it seems to be loaded wrong maybe, becoming huge or
    could also look uninitialized.



  • @mrjj

    when i save it and do qDebug like this;

    void second::on_closeButton_clicked()
    {
        save = ui->dial->value();
       qDebug() << " save val:" << save;
        close();
    }
    

    i got the rigth value from qDebug . But at startup ;

    .....
    ui->setupUi(this);   
    ui->dial->setValue(save);
    qDebug() << " save val:" << save;
    

    i got wrong value.


  • Qt Champions 2017

    ok, but how to you save it to file ? and load it from file again?

    If you dont load the old value from a file, it will
    just have some random value when you start again.



  • @mrjj
    yow want to know whether i use QFile or something same to store the value or not ? if so , i dont use anything like that. İ just define save variable in second.h module with default value "0".


  • Qt Champions 2017

    @rapid84
    Ok. but it cannot remember values from run to run, unless you save it in a file.
    I do wonder why it has that high value if you set it to 0.



  • @mrjj

    if i define with "0" i got only "0" value, but when i define without any default, i got some value like "199922356" , so it is just misunderstanding. anyway, then i have to use QFile, crate a file and save the value to it, and load the save value from a file ?


  • Qt Champions 2017

    @rapid84
    If you dont define any default value, it will just have random value as it just uses
    what ever is in that memory location.

    Yes, to keep it for later runs, you must save it to file. QFile is fine to use.
    You can also have a look at QSettings.
    http://doc.qt.io/qt-5/qsettings.html
    Its ment for saving such values.

    its easy to use

    //load
     QSettings settings("settingName");
     int  aValue=settings.value("aKey").toInt();
    
     //write
     QSettings settings("settingName");
    int somevalue=yoursave;
     settings.setValue("aKey",somevalue);
    


  • @mrjj

    "aKey" is a mandatory paramater ? and the reference mentions that:

    When creating a QSettings object, you must pass the name of your company or organization as well as the name of your application. For example, if your product is called Star Runner and your company is called MySoft, you would construct the QSettings object as follows:
    
        QSettings settings("MySoft", "Star Runner");
    

    Is this mandatory ? what if , if i dont have any company ? :)


  • Qt Champions 2017

    @rapid84
    hi
    the akey is the name of the value. It saves to registry so that why it needs a name
    For you , it could be slidervalue or something that explains what u save.

    You can use anything u like for company. Its also because its store in registry.
    So just use some name u like that IS not a real company. :)



  • @mrjj

    For loading i use;

     QSettings settings("settingName");
        int  aValue=settings.value("aKey").toInt();
        int  aValue2=settings.value("aKey2").toInt();
        ui->dial->setValue(aValue);
        ui->dial_2->setValue(aValue2);
    

    and for saving i use

    QSettings settings("settingName");
        int somevalue = ui->dial->value();
        int somevalue2 = ui->dial_2->value();
        settings.setValue("aKey",somevalue);
        settings.setValue("aKey2",somevalue2);
    

    These work for me , thanks for help. by the way, in a debian OS , where do it save ( in which directory)?


  • Qt Champions 2017

    Hi
    That is good question :)
    try
    qDebug() << settings.fileName();


  • Qt Champions 2017

    If I may suggest one improvement is to use a better name than
    "aKey" and "aKey2"
    Maybe Dial1Value and Dial2Value



  • @mrjj

    when i click the close button, while it is saving data , it waits sometime and close with a 1-2 seconds delay. Is this normal ?


  • Qt Champions 2017

    @rapid84
    Normally it saves really fast so i never noticed it.



  • @mrjj
    on raspbian sometimes it takes up to 5 -6 seconds to store the data. i have tested it, maybe i will need to use QFile.


  • Qt Champions 2017

    @rapid84
    ok. thats pretty long.
    It must have a reason.
    QFile should be faster.


  • Lifetime Qt Champion

    Hi,

    You shouldn't need to but you can try adding a call to sync in order to flush the content of your settings to the disk.



  • @mrjj @SGaist
    hi
    i am using QFile now and it works clearly for me. Thanks.


Log in to reply
 

Looks like your connection to Qt Forum was lost, please wait while we try to reconnect.