IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Discussion :

enregistrer une classe personnalisee dans un QSettings

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre très actif Avatar de elmcherqui
    Profil pro
    Inscrit en
    Février 2008
    Messages
    281
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : Maroc

    Informations forums :
    Inscription : Février 2008
    Messages : 281
    Par défaut enregistrer une classe personnalisee dans un QSettings
    bonsoir ,
    mon probleme est tres simple :
    j'ai cree une classe personnalisee que j'aimerais enregistrer dans QSettings , dans la methode QSettings::setValue(...) au deuxieme argument elle attend un QVariant .

    voila mon code (tres simple a lire ) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    #include <QtGui/QApplication>
    #include<QtGui/QtGui>
     
    class personnage {
        private :
            bool estMort;
            int vie;
            short age;
            QString nom;
            QStringList enfants;
        public:
        // ...ici constructeur et  plein de methodes...
    };
     
    int main(int argc, char *argv[])
    {
        QApplication a(argc, argv);
     
        personnage nain;
        // ..ici plein de modifications sur nain ...
     
        QSettings setting("societe","jeu");
     
        setting.setValue("personnage",nain); //probleme ici
     
        return a.exec();
    }
    bien evidement sa ne marche pas , n'y aurais t'il pas un moyen de conversion de personnage a QVariant directement sans enregistrer attribut par attribut ?
    si quelqu'un arrive a faire la conversion qu'il m'indique aussi comment recuperer les information aussi s'il vous plait .
    bonne soiree .

    edit : j'ai oublié je veux absolument passer par QSettings pas QFile ni QDataStream .

  2. #2
    Rédacteur

    Inscrit en
    Novembre 2006
    Messages
    1 272
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 272
    Par défaut
    Je pense que tu devrais essayer avec la methode static QVariant::fromValue()

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    MyClass cls;
    QVariant variantCls = QVariant::fromValue(cls);
    J'ai jamais essayé mais je pense que cela devrait marcher.
    Tiens nous au courant.
    Vous voulez participer aux Tutoriels, FAQ ou Traductions et faire partie de l'équipe Qt de Developpez.
    N'hésitez pas à me contacter par MP.

  3. #3
    Membre très actif Avatar de elmcherqui
    Profil pro
    Inscrit en
    Février 2008
    Messages
    281
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : Maroc

    Informations forums :
    Inscription : Février 2008
    Messages : 281
    Par défaut
    merci pour la reponse
    j'ai fait sa :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    #include <QtGui/QApplication>
    #include<QtGui/QtGui>
     
    class personnage {
        private :
            bool estMort;
            int vie;
            short age;
            QString nom;
            QStringList enfants;
        public:
        // ...ici constructeur et  plein de methodes...
    };
     
    int main(int argc, char *argv[])
    {
        QApplication a(argc, argv);
     
        personnage nain;
        // ..ici plein de modifications sur nain ...
     
        QSettings setting("societe","jeu");
     
        QVariant variantCls = QVariant::fromValue(nain);//probleme ici
     
        setting.setValue("personnage",variantCls); 
     
        return a.exec();
    }
    sa ne marche toujours pas

  4. #4
    Membre émérite

    Profil pro
    Inscrit en
    Mai 2007
    Messages
    774
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Finistère (Bretagne)

    Informations forums :
    Inscription : Mai 2007
    Messages : 774
    Par défaut
    Salut,

    Alors je pense que tu dois passer par un QMetaType pour que QVariant puisse "encoder" ta classe.

    La méthode QVariant::setValue ( const T & value ) doit être utilisée, mais tu dois d'abord déclarer ta classe comme type utilisable par QVariant. Va lire dans la classe QMetaType, et notamment la macro Q_DECLARE_METATYPE().
    Ca paraît complexe en lisant, mais en fait c'est très simple d'utilisation (comme toujours avec Qt ).

    G.

    PS : il y a des particularités avec msvc 6, donc fais y attention si tu utilises ce compilateur.

  5. #5
    Membre très actif Avatar de elmcherqui
    Profil pro
    Inscrit en
    Février 2008
    Messages
    281
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : Maroc

    Informations forums :
    Inscription : Février 2008
    Messages : 281
    Par défaut
    Merci beaucoup pour les liens , j'ai enfin reussi a serialiser ( jamais j'aurais cru prononcer un tel mot lol :p ) !
    sujet resolu

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Enregistrer une classe sérialisée dans un fichier
    Par Despirithium dans le forum Débuter
    Réponses: 7
    Dernier message: 29/01/2013, 15h34
  2. [IO] Enregistrer une classe dans un fichier
    Par kase74 dans le forum Langage
    Réponses: 11
    Dernier message: 28/03/2012, 17h18
  3. Enregistrer une classe dans un fichier
    Par Davjack dans le forum Langage
    Réponses: 2
    Dernier message: 31/05/2007, 21h16
  4. Réponses: 7
    Dernier message: 01/09/2006, 14h19
  5. Réponses: 4
    Dernier message: 08/11/2005, 15h10

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo