- QT
- AbulEduApplicationV1
- AbulEduAproposV1
- AbulEduAudioV1
- AbulEduButtonListV1
- AbulEduCameraV1
- AbulEduCameraWidgetV1
- AbulEduConstantesV1
- AbulEduEditeur
- AbulEduGraphicsEtiquetteV1
- AbulEduIdentitesV1
- AbulEduInstructionV1
- AbulEduMediaplayerV1
- AbulEduMediathequeGetV1
- AbulEduMenuFeuilleV1
- AbulEduNumericLinearPadv1
- AbulEduQRCodeReaderV1
- AbulEduSingletonV1
- AbulEduSlideWidgetContainerV1
- AbulEduStackedWidgetV1
- AbulEduTexteV1
- AbulEduTextV1
- AbulEduTutorialV1
- AbulEduVirtualKeyboardV1
- AbulEduVisionneuseImageV1
- AbulEduWidgetAssistantEtapesV1
- Affichage des messages d'erreurs
- Affichage dynamique des étapes d'un éditeur
- Bouton croix de fenêtre
- Centrer une fenêtre
- Création fichierdossier temporaire unique
- Créer une AbulÉduApplicationV1 dans QtCreator
- Framework Graphic View
- Framework Graphic Viewodt
- Framework State Machine
- Générer automatiquement un dictionnaire de verbes
- Gérer la modalité des fenêtres
- Gestion des arguments
- Getters par référence et non par valeur
- Installation Qt5
- Installation Qt56
- Normalisation des modules
- Partager des variables avec différents pri
- Redimensionnement application Qt
- Redimensionner un QGraphicsSvgItem
- Tests et Logs sous Windows
- Utilisation de l'assistant AbulEduApplicationV1
- Utiliser des QSharedPointer
QSettings¶
Création :¶
Rien de plus simple : le principe, en écriture, est que si ça existe, on écrase, si ça n'existe pas on crée...
QSettings fichierConfiguration(QDir::homePath()+"/leterrier/monLogicielDuTerrier/conf.perso/parametres.conf", QSettings::IniFormat);
La fonction QDir::homePath() retourne sous forme d'un QString le nom du répertoire personnel quelle que soit la plateforme.
On choisira de l'enregistrer au format "ini".
Sections :¶
On peut créer des sections à l'intérieur du fichier :
fichierConfiguration.beginGroup(nomDeSection); instructions(); fichierConfiguration.endGroup();
La section apparaîtra détachée de la précédente d'un retour-charriot, le nom entre crochets.
On peut créer des sections dans les sections :
fichierConfiguration.beginGroup(nomDeSection1); fichierConfiguration.beginGroup(nomDeSection1A); instructions(); fichierConfiguration.endGroup(); fichierConfiguration.beginGroup(nomDeSection1B); instructions(); fichierConfiguration.endGroup(); fichierConfiguration.endGroup(); fichierConfiguration.beginGroup(nomDeSection2); instructions(); fichierConfiguration.endGroup();
Pour chaque instruction correspondant à une section de niveau inférieur, on aura des lignes commençant par "nomDeSection1A\..."
Instructions :¶
Pour écrire la valeur d'un paramètre :
fichierConfiguration.setValue("nomDuParametre", valeurDuParametre);
La valeurDuParametre peut être de toutes les natures supportées par QVariant
Pour lire la valeur d'un paramètre :
int m_attribut; m_attribut = fichierConfiguration.value("nomDuParametre").toInt());
... en supposant que mon paramètre soit un entier.
Un exemple pour éclaircir ?¶
J'écris :
QSettings fichierConfiguration(QDir::homePath()+"/leterrier/monLogicielDuTerrier/conf.perso/films.conf", QSettings::IniFormat); fichierConfiguration.beginGroup("Les Tontons Flingueurs"); fichierConfiguration.beginGroup("Acteurs"); fichierConfiguration.setValue("Fernand Naudin", "Lino Ventura"); fichierConfiguration.setValue("Maître Folace", "Francis Blanche"); fichierConfiguration.setValue("Raoul Volfoni", "Bernard Blier"); fichierConfiguration.endGroup(); fichierConfiguration.setValue("Réalisateur","Georges Lautner"); fichierConfiguration.setValue("Dialoguiste","Michel Audiard"); fichierConfiguration.endGroup(); fichierConfiguration.beginGroup("Les Barbouzes"); ...
Ce qui devrait donner un fichier films.conf qui ressemble à
[Les Tontons Flingueurs] Acteurs\Fernand Naudin = Lino Ventura Acteurs\Maître Folace = Francis Blanche Acteurs\Raoul Volfoni = Bernard Blier Réalisateur = Georges Lautner Dialoguiste = Michel Audiard [Les Barbouzes] ...
Je veux mettre dans un QLabel le nom de l'acteur qui joue Raoul ("Mais il connaît pas Raoul ce mec ! Moi quand on m'en fait trop, j'corrige plus... je dynamite, je disperse, je ventile")
QSettings fichierConfiguration(QDir::homePath()+"/leterrier/monLogicielDuTerrier/conf.perso/films.conf", QSettings::IniFormat); fichierConfiguration.beginGroup("Les Tontons Flingueurs"); fichierConfiguration.beginGroup("Acteurs"); QLabel personnageFavori(fichierConfiguration.value("Raoul Volfoni").toString()); fichierConfiguration.endGroup(); fichierConfiguration.endGroup();
Aller plus loin avec les QSettings¶
Vous pouvez avoir besoin de sauvegarder une liste de longueur variable. Il existe une façon simple de réaliser ceci en utilisant : QSettins::beginWriteArray ( const QString &prefix, int size=-1)
//On crée le fichier de paramètres
QSettings parametres("data/exercices/MonFichierDeParametres.ini", QSettings::IniFormat);
//J'ouvre un fichier pour récupérer des données (lignes de texte)
QFile monFichier("data/exercices/Mon_fichier_de_texte.txt");
if(monFichier.open(QFile::ReadOnly| QIODevice::Text))
{
QTextStream in(&monFichier);
int i=0;
// C'est ici que c'est intéressant On prépare une sous-section appelée "paroles"
parametres.beginWriteArray("paroles");
// On lit le fichier lignes par lignes
while (!in.atEnd())
{
QString line = in.readLine();
//L'index est fixé à i
parametres.setArrayIndex(i);
i++;
// On écrit les valeurs des clés "ligne" et "temps"
parametres.setValue("ligne", line);
// Je convertis le nombre en QString parce que ça m'arrange, mais c'est pas obligé
parametres.setValue("temps",QString::number(MonTemps));
}
Quand la lecture du fichier texte est terminée, on ferme la section.
parametres.endArray();
}
On obtient alors un fichier .ini qui ressemble à ça :
[paroles] 1\ligne=" La Gadoue" 1\temps=4000 2\ligne= 2\temps=8000 3\ligne=Du mois de septembre au mois d'ao\xfbt 3\temps=12000 4\ligne=Faudrait des bottes de caoutchouc 4\temps=16000 .... 58\ligne="Ouh ! La gadoue, la gadoue, la gadoue" 58\temps=232000 59\ligne="Ouh ! la gadoue, la gadoue" 59\temps=236000 size=59
On peut remarquer que la clé "size" a été insérée automatiquement avec la valeur correspondant au nombre de sous-clé créées. (Utile !)
Pour lire ce fichier, ce n'est pas plus difficile :
//On récupère notre fichier de paramètres
if(QFile::exists(fichierParametres))
{
//Il y a un fichier de paramètres
QSettings parametres(fichierParametres,QSettings::IniFormat);
// C'est magique, on récupère la taille du tableau directement
int taille = parametres.beginReadArray("paroles");
// Quelques bricoles !
...
...
// Et on boucle sur le nombre d'entrée dans la zone [paroles]
for(int i=0; i<taille;i++)
{
//On incrémente l'index
parametres.setArrayIndex(i);
// On récupère la valeur du temps et on lui fait subir quelques outrages
qint64 valTime=parametres.value("temps").toInt();
...
...
// On récupère la ligne de texte
QString maChaine=parametres.value("ligne").toString();
...
...
}
// Et on ferme la zone
parametres.endArray();
}
Il est possible d'accéder directement à une valeur par son index(vérifier qu'il est inférieur à la valeur de size) avec setArrayIndex(int) après avoir appelé beginReadArray() ou beginWriteArray()
Et voilà !