2013-07-01 1 views
1

J'ai une application et l'utilisateur peut changer le dossier par défaut pour l'enregistrement des fichiers.Qt - Sauvegarde d'un chemin QString à QSettings dans regisrty

Le dossier dans lequel l'utilisateur enregistre les fichiers: QString SaveImagesDirectory;

Je veux que lorsque l'utilisateur quitte l'application, les données SaveImagesDirectory seront enregistrées dans le Registre.

J'ai essayé le code suivant:

QSettings settings(ORG_NAME, APP_NAME); 
settings.setValue("LastGuiValue/LastSaveImagesDirectory",SaveImagesDirectory); 

Le problème est que quand je rafraîchi le registre, il n'y avait pas de valeur dans LastSaveImagesDirectory.

Par conséquent, lorsque j'ai essayé de lire en utilisant le code suivant:

SaveImagesDirectory=settings->value("LastGuiValue/LastSaveImagesDirectory",QDir::currentPath()).value<QString>(); 

La variable SaveImagesDirectory n'a obtenu que le QDir::currentPath(). J'ai regardé le registre et en effet le LastSaveImagesDirectory était sans valeur.

+0

Veuillez appeler la méthode 'sync()' et vérifier le résultat de la fonction 'status()' de QSettings. Peut-être que vous n'avez pas écrit les droits de registre par exemple. – eraxillan

+0

Salut Axilles, Merci pour votre réponse. Je peux écrire dans le registre pour les valeurs entières. Que faut-il faire pour sauver une chaîne? Aidez-moi, s'il vous plaît ! – EVH671

+0

@ EVH761 Alors, que retourne la fonction 'status()'? si elle renvoie la valeur 'NoError', alors vous devriez pouvoir stocker toutes les valeurs supportées par QVariant dans le registre - QString en fait partie. – eraxillan

Répondre

1

Bonjour,

vous pouvez vérifier si le système est capable d'écrire au registre en mettant en œuvre un programme de test simple comme celui-ci:

// Registry Write Test Programm 

#include <QtGui/QApplication> 
#include <QtGui/QMessageBox> 
#include <QtCore/QSettings> 
#include <QtCore/QString> 
#include <QtCore/QVariant> 

int main(int argc, char **argv) 
{ 
    QApplication *app = new QApplication(argc, argv); 
    QSettings settings(QLatin1String("D-Soft"), QLatin1String("RegistryTest")); 

    QString hello = settings.value("LastGuiValue/LastSaveImagesDirectory").toString(); 
    QMessageBox::information(NULL, QLatin1String("Info"), 
    QString(QLatin1String("From Settings: %1")).arg(hello)); 

    if(hello.isEmpty()) 
    hello = QLatin1String("Oh my!"); 

    settings.setValue("LastGuiValue/LastSaveImagesDirectory", hello); 

    delete app; 
    app = NULL; 

    return 0; 
} 

Sans la nécessité d'autorisations élevées votre programme devrait pouvoir écrire dans la ruche HKLM_CURRENT_USER/SOFTWARE. Ce programme devrait prouver si c'est le cas. Si cela fonctionne, vous devriez vérifier votre code ou l'afficher, sinon il y a un problème plus profond à portée de main.