Home / Programmazione / C - C++ / Salvare le preferenze utente in Qt
Mattepuffo

Salvare le preferenze utente in Qt

Salvare le preferenze utente in Qt

Salvare le prefernze dell'utente in Qt è veramente semplice.

Ci basta usare la classe QSettings, che si preoccupa di salvare le preferenze in questo modo:

  • se il programma è lanciato su Windows, i dati vengono salvati automaticamente nel registro di sistema
  • se siamo su Linux (e penso che sul Mac sia uguale), i dati vengono salvati nella home dell'utente, in una directory tipo questa:
    • /home/UTENTE/.config/NOME_ORGANIZZAZIONE/NOME_PROGRAMMA.conf

Due cose importanti al riguardo:

  • sarà il framework in automatico a identificare su quale OS siamo, e quindi noi ci dobbiamo preoccupare solo di salvare i dati come serve alla nostra applicazione
  • il nome dell'organizzazione potete impostarlo voi (potete leggere qua); se non viene settato, ne viene impostato uno in automatico

Bene, detto ciò, vediamo un esempio.

Nell'header della nostra finestra, creaimo una variabile privata QSettings e definiamo due macro:

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>

#define SIZE_W "w"
#define SIZE_H "h"

namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = 0);
    virtual ~MainWindow();

private:
    Ui::MainWindow *ui;
    QSettings settings;
};

#endif // MAINWINDOW_H

A questo punto nel file di implementazione dobbiamo settare i valori.

Per farlo useremo il metodo setValue, che richiede i parametri in formato KEY = VALUE.

Ad esempio:

settings.setValue(SIZE_W, ui->txtWidth->text());
settings.setValue(SIZE_H, ui->txtHeight->text());

Abbiamo settato i due valori usando le macro impostate nell'header; i valori li prendiamo da due caselle di testo (ma possiamo prenderli da dvoe ci pare).

Per usarli ci basetrà richiamarli così:

settings.value(SIZE_W, "0");
settings.value(SIZE_H, "0");

Il secondo parametro è un parametro che rappresenta il valore di default nel caso in cui il primo parametro (la chiave) non fosse valorizzata.

Tutto qua!

Cercate di fare un pò di prove su differenti sistemi, e con diversi nomi organizzazione, in modo da capire bene come funziona.

Enjoy!