2009-12-01 10 views
5

J'écris une application Qt et devra stocker les paramètres pour le programme. Je veux qu'ils soient facilement modifiables par des utilisateurs non-avancés tout en étant assez flexibles pour les utilisateurs avancés (permettant ainsi une édition automatisée facile via d'autres programmes, scripts, etc.). QSettings fournit deux formats, le format natif, qui pour Windows est le registre, et le format INI, qui est natif pour la plupart des autres plates-formes. INI va bien, mais voir @QString (...) ou d'autres trucs de Qt n'est pas vraiment lisible et est sujet aux erreurs.Quels sont les paramètres du format de stockage à choisir?

Le registre n'est pas génial non plus. Il n'a pas été conçu pour être manipulé et donc pas vraiment bon pour l'édition ou l'utilisation avancée; cela résout le problème de la synchronisation entre threads et plusieurs objets QSettings (donc je n'efface pas tout, bien que je puisse simplement utiliser un objet global, protégé par un locker en lecture-écriture). Je regarde XML, mais c'est assez bavard et il faut écrire un format QSettings (pas vraiment un problème) mais très flexible.

Je connais d'autres alternatives à XML mais je ne les connais pas vraiment; Je ne veux certainement pas écrire un analyseur, exception pour mon propre format final, pas pour la base.

Mise à jour - Note: Je ne vais pas contourner QSettings du tout, je vais juste écrire un format pour elle - qui ressemble il est à seulement deux pointeurs de fonction (pour une lecture et une fonction d'écriture) passé à une statique fonction et ensuite je peux utiliser mon format.

Mise à jour 2: Je suis aussi inquiet sur les serveurs Linux, qui n'ont généralement pas une interface graphique .. Je veux que les gens soient en mesure de modifier la configuration facilement à partir du serveur via nano ou quelque chose de similaire, sans utiliser la gestionnaire (oui, j'aurai un serveur démon et un gestionnaire d'interface graphique à distance).

Répondre

1

Si pour une raison quelconque, vous finissez par passer par QSettings et compte tenu de XML pour votre fichier de configuration, je vous suggère d'aller consulter JSON ou YAST , selon la façon dont vous aimez les libs disponibles. Si vous ne voulez pas que les utilisateurs éditent le fichier manuellement, choisissez simplement ce qui vous est le plus facile (QSettings?) Et continuez votre vie, puisque le choix du format n'aura aucune importance un seul bit (har har).

+0

Je vais les regarder et je verrai comment écrire un format QSettings si Je choisis eiher. Il sera important de se déplacer entre les ordinateurs. Un fichier est aussi facile que de copier le fichier. Une clé de registre doit être exportée dans un fichier puis importée. Et regedit pourrait se plaindre si vous lui donnez un fichier .reg créé avec un regedit plus récent. – CMircea

0

Une autre façon de voir la verbosité est la robustesse du contenu. Si pour une raison quelconque (une particule alpha bombardant le disque, provoquant un seul bit à retourner), vous pouvez toujours y aller et faire la correction d'erreur nécessaire ... donc il y a un avantage, mais aussi un coût associé ... avec un fichier binaire, une erreur d'un seul bit signifie que les données sont complètement perdues

+1

C'est vrai, mais dans ce cas, probablement à côté du point.Je m'inquiéterais certainement de la corruption silencieuse des données et de la récupération manuelle des documents, des éléments de travail et autres, mais ce n'est probablement pas un gros problème pour le stockage des paramètres. –

+0

Pas beaucoup d'un problème pour les paramètres, juste l'utilisateur éditant manuellement le fichier et la rupture de la structure, mais cela peut être vérifié et même corrigé (ou tout simplement supprimé/ignoré) facilement. – CMircea

1

Je commencerais par faire les QSettings via des fichiers .ini, et je verrais si vous vous retrouveriez avec de nombreux problèmes. S'il n'y a pas de problèmes, il n'y a pas besoin d'opter pour une solution XML. Si vous finissez par vouloir la solution XML, vous pouvez (comme mentionné) ajouter un formateur pour les objets QSettings.

3

Vous pouvez utiliser la classe QSettings pour cela. C'est une classe d'abstraction qui permet à vos applications de stocker ses paramètres afin de les récupérer au prochain lancement.

Enregistrer les paramètres:

QSettings settings("ValueName", "Value"); 

paramètres de Lire:

QString v = settings.value("ValueName"); 
+0

Veuillez relire ma question. Je le sais et j'utiliserai QSettings, mais je m'inquiète du format sous-jacent. QSettings fournit un format INI et un format de registre Windows. – CMircea

+0

QSettings utilise le format de stockage "standard" pour le système d'exploitation. C'est pourquoi j'ai parlé d'abstraction. Cette classe vous permet d'utiliser le format standard de chaque système même s'ils ne sont pas identiques. C'est la façon dont Qt enregistre les valeurs pour votre application. Pas besoin de le faire par vous-même, sauf si vous voulez enregistrer un objet complexe. Dans ce cas, je pense que XML est le meilleur moyen. –

+1

L'OP dit qu'il veut que les utilisateurs de son application éditent les paramètres avec facilité, pas qu'il veuille enregistrer les paramètres avec facilité (parce qu'il est déjà) – blwy10