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

Qt Discussion :

Acces au variables statiques en c++ /QT 3 designer


Sujet :

Qt

  1. #1
    Membre confirmé
    Inscrit en
    Novembre 2006
    Messages
    91
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 91
    Par défaut Acces au variables statiques en c++ /QT 3 designer
    Bonjour,
    pour mon projet ihm(Gestion d'un mgasin de meuble).
    j'ai relisé un logiciel avec un ficher comme base de donnée.
    au debut il faut chager le fichier dans la mémoire (j'ai crée des tabeaux)
    au moment de l'execution (ajouter, supprimer, afficher) j' utilise les données des tableaux.
    quand on quitte il faut , que je sauvegarde les données des tableaux dans le fichier.

    mais j'ai un probleme au démarrage sur le chargement du fichier dans tes tableau de variables static (partager les données dans tt les classes).
    ja'i fait ca:


    Data.h
    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
     
     
    #ifndef MEUBLE_H
    #define MEUBLE_H
     
    #include <qstring.h>
     
    class Data
    {
    public:
     
     
        static QString  intitule;
        static QString  type;
        static QString couleur ;
        static int ref;
        static int  qte;
     
     
     
    };
     
    #endif
    Form1.cpp

    avec include "Data.h"
    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
    30
    31
    32
    33
    34
    35
     
    void Form1::init()
    {
        int i=0,j;
        // Un tableau d'enregistrement
     
       Data *D =new Data[5];
     
     
     
         QFile f( "meubles.txt" );
     
        if( !f.open( IO_ReadOnly))
     
     {
       //Erreur d'ouverture du fichier
        std::cout << "Failed to open file." << std::endl;
     }
     
        QTextStream ts( &f );
     
      // Extraction des informations depuis le fichier
     
       while(!ts.eof( ) &&(i<5))
      {
           ts >> D[i].ref;
           ts >>  D[i].intitule;
           ts >> D[i].type;
           ts >> D[i].couleur;
           ts >> D[i].qte;
      i++;
      }
     
     
      }
    à la compilation j'ai ca
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    .obj/form1.o: In function `Form1::init()':
    form1.cpp:(.text+0x4d4): undefined reference to `Data::ref'
    form1.cpp:(.text+0x4e4): undefined reference to `Data::intitule'
    form1.cpp:(.text+0x4f4): undefined reference to `Data::type'
    form1.cpp:(.text+0x504): undefined reference to `Data::couleur'
    form1.cpp:(.text+0x514): undefined reference to `Data::qte'
    collect2: ld a retourné 1 code d'état d'exécution
    make: *** [magasin] Erreur 1

    merci d'avance

  2. #2
    Membre Expert

    Avatar de IrmatDen
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 727
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 727
    Par défaut
    Salut,

    C'est un problème de C++ là; tu les as déclaré comme membre statique. C-a-d comme attribut de classe et non d'instance.

  3. #3
    Membre confirmé
    Inscrit en
    Novembre 2006
    Messages
    91
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 91
    Par défaut
    Citation Envoyé par IrmatDen Voir le message
    Salut,

    C'est un problème de C++ là; tu les as déclaré comme membre statique. C-a-d comme attribut de classe et non d'instance.

    oui j'ai choisi de les décladé static pour que je puisse les utiliser les consulter et les modifier à partir d'une autre classe.
    comment faire pour acceder à ces varibles. j'ai essayer de faire par exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    fs >> Data::ref
    fs >> Data::intitule
    fs >> Date::type
    fs >> Data::couleur
    fs >> Data::qte
    ca na pas marché
    merci

  4. #4
    Membre chevronné
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2006
    Messages
    507
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Mai 2006
    Messages : 507
    Par défaut
    Salut !

    L'accès à des variables statiques d'une classe s'effectue comme suit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    [...]
     // Extraction des informations depuis le fichier   
    while(!ts.eof () && i<5) {
       ts >> Data::ref;
       ts >> Data::intitule;
       ts >> Data::type;
       ts >> Data::couleur;
       ts >> Data::qte;
       i++;
    }
    [...]
    Mais bon, dans ce cas tu vas lire 5 fois les valeurs dans ton fichier et écraser à chaque lecture tes données précédentes...
    Il y a donc un petit problème de conception dans tes classes !

  5. #5
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 035
    Par défaut
    Il faut que tu ajoute dans le .cpp
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    QString  Data::intitule;
    QString  Data::type;
    QString  Data::couleur ;
    int        Data::ref;
    int        Data::qte;
    Tu peut aussi en profité pour les initialiser
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    QString  Data::intitule;
    QString  Data::type';
    QString  Data::couleur;
    int        Data::ref   = 0;
    int        Data::qte  = 0;
    Un manière plus propre serait d'utiliser un/des singletons

  6. #6
    Membre confirmé
    Inscrit en
    Novembre 2006
    Messages
    91
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 91
    Par défaut
    en fait ce que veux faire c'est decreer une classe Data avec des variables static.
    après , je vais creer un tableau de classe data.

    pour votre code c'est tjrs le même probleme.

  7. #7
    Membre confirmé
    Inscrit en
    Novembre 2006
    Messages
    91
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 91
    Par défaut
    Citation Envoyé par Mongaulois Voir le message
    Il faut que tu ajoute dans le .cpp
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    QString  Data::intitule;
    QString  Data::type;
    QString  Data::couleur ;
    int        Data::ref;
    int        Data::qte;
    Tu peut aussi en profité pour les initialiser
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    QString  Data::intitule;
    QString  Data::type';
    QString  Data::couleur;
    int        Data::ref   = 0;
    int        Data::qte  = 0;
    Un manière plus propre serait d'utiliser un/des singletons
    J'ai fait ca dans Form1
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
     
    void Form1::init()
    {
     
        QString  Data::intitule;
        QString  Data::type;
        QString  Data::couleur ;
         int        Data::ref=0;
         int        Data::qte=0;
         int i=0;
         ...
    à la compile
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
     
    .ui/../form1.ui.h: In member function «void Form1::init()":
    .ui/../form1.ui.h:15: erreur: invalid use of qualified-name «Data::intitule"
    .ui/../form1.ui.h:16: erreur: invalid use of qualified-name «Data::type"
    .ui/../form1.ui.h:17: erreur: invalid use of qualified-name «Data::couleur"
    .ui/../form1.ui.h:18: erreur: invalid use of qualified-name «Data::ref"
    .ui/../form1.ui.h:19: erreur: invalid use of qualified-name «Data::qte"
    make: *** [.obj/form1.o] Erreur 1
    merci

  8. #8
    Membre confirmé
    Inscrit en
    Novembre 2006
    Messages
    91
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 91
    Par défaut
    Citation Envoyé par mansour67 Voir le message
    Je suis sur QT3 designer, je clique sur le fênetre et je programme les methodes.
    J'ai fait ca dans Form1
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
     
    void Form1::init()
    {
     
        QString  Data::intitule;
        QString  Data::type;
        QString  Data::couleur ;
         int        Data::ref=0;
         int        Data::qte=0;
         int i=0;
         ...
    à la compile
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
     
    .ui/../form1.ui.h: In member function «void Form1::init()":
    .ui/../form1.ui.h:15: erreur: invalid use of qualified-name «Data::intitule"
    .ui/../form1.ui.h:16: erreur: invalid use of qualified-name «Data::type"
    .ui/../form1.ui.h:17: erreur: invalid use of qualified-name «Data::couleur"
    .ui/../form1.ui.h:18: erreur: invalid use of qualified-name «Data::ref"
    .ui/../form1.ui.h:19: erreur: invalid use of qualified-name «Data::qte"
    make: *** [.obj/form1.o] Erreur 1
    merci

  9. #9
    Membre chevronné
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2006
    Messages
    507
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Mai 2006
    Messages : 507
    Par défaut
    Citation Envoyé par mansour67 Voir le message
    en fait ce que veux faire c'est decreer une classe Data avec des variables static.
    après , je vais creer un tableau de classe data.
    C'est justement ce qui ne va pas !
    Une variable statique est identique pour toutes les instances de cette classe. Si tu fais un tableau d'objets d'une classe contenant des variables statiques, tous les éléments de ton tableau auront la même valeur pour les variables statiques (elles servent justement à ça !)

    Je ne connais pas ton problème particulier, mais il vaut sans doute mieux que tes variables ne soient pas statiques...

  10. #10
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 035
    Par défaut
    Citation Envoyé par mansour67 Voir le message
    J'ai fait ca dans Form1
    Je me suis mal exprimé...
    Tu met ça juste après les include.
    Comme des variable globale

    Tu devrait chercher ce qu'es un singleton

  11. #11
    Membre Expert

    Avatar de IrmatDen
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 727
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 727
    Par défaut
    Citation Envoyé par Mongaulois Voir le message
    Tu devrait chercher ce qu'es un singleton
    OMG, non! Surtout pas, le Singleton est difficile à bien utiliser, c'est un anti pattern par excellence, et certainement pas quelque chose à montrer à un débutant qui va en foutre partout! N'oublie pas que c'est une variable globale, rien de plus.

    Mansour:
    Tu fais une classe Data *sans* membre statique. Les attributs seront des variables d'instance. Ensuite, le chargement, tu ne le fais pas dans Form1, mais dans une méthode à part reliée à Data (pas contenue dans Data vu l'usage qui en fait) à laquelle tu passes le fichier à lire et qui retourne un conteneur de Data (vector ou autre, le choix du conteneur est un autre problème). Tu déclares ensuite quelque méthode qui servent d'accesseurs vers les propriétés de Data pour les lire.

  12. #12
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 035
    Par défaut
    Citation Envoyé par IrmatDen Voir le message
    OMG, non! Surtout pas, le Singleton est difficile à bien utiliser, c'est un anti pattern par excellence, et certainement pas quelque chose à montrer à un débutant qui va en foutre partout! N'oublie pas que c'est une variable globale, rien de plus.
    ??? un anti pattern????
    ben non?? c'est un bon pattern...

    Citation Envoyé par IrmatDen Voir le message
    et certainement pas quelque chose à montrer à un débutant qui va en foutre partout! N'oublie pas que c'est une variable globale, rien de plus.
    Hum... ca ce discute..

  13. #13
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 035
    Par défaut
    J'ai créé un thread pour le singleton
    http://www.developpez.net/forums/sho...46#post3166346
    pour ne pas partir en hors sujet

  14. #14
    Membre confirmé
    Inscrit en
    Novembre 2006
    Messages
    91
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 91
    Par défaut
    Citation Envoyé par Fabllot Voir le message
    C'est justement ce qui ne va pas !
    Une variable statique est identique pour toutes les instances de cette classe. Si tu fais un tableau d'objets d'une classe contenant des variables statiques, tous les éléments de ton tableau auront la même valeur pour les variables statiques (elles servent justement à ça !)

    Je ne connais pas ton problème particulier, mais il vaut sans doute mieux que tes variables ne soient pas statiques...
    J'ai fait ca:
    Data.h
    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
     
     
    #ifndef MEUBLE_H
    #define MEUBLE_H
     
    #include <qstring.h>
     
    class Data
    {
    public:
     
     
        QString  intitule [5],
                     type [5],
                     couleur[5] ;
        int ref[5],
             qte[5];
     };
     
     
     
    #endif
    dans la Classe Form1
    form1.h

    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
    30
    31
    32
    33
     
    void Form1::init()
    {
     
        int i=0;
     
        //Un tableau d'enregistrements
        Data enr;
        //Copier les données du fichier
         QFile f( "meubles.txt" );
     
        if( !f.open( IO_ReadOnly))
     
     {
       //Erreur d'ouverture du fichier
        std::cout << "Failed to open file." << std::endl;
     }
     
        QTextStream ts( &f );
     
     
       while(!ts.eof( ) &&(i<5))
      {
       ts >> enr.ref[i];
        ts >>  enr.intitule[i];
        ts >> enr.type[i];
        ts >> enr.couleur[i];
        ts >> enr.qte[i];
        i++;
        i++;
      }
     
     }
    Je veux que ces donnée soitent en mémoire (tableaux) pour les utiliser dans d'autres classes: exemple dans la saisi

    classe

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    void dlgSaisi::saisir()
    {
     
      ...
     
    }
    comment acceder au valeur de l'objet Data D de la classe Form1.?
    merci

  15. #15
    Membre Expert

    Avatar de IrmatDen
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 727
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 727
    Par défaut
    Voilà comment je vois la chose (compte tenu de ce que tu en as dit pour l'instant bien sûr)

    Bon, je ne saurais que trop te recommander de bien comprendre les modifications apportées au passage, relire nos 2 codes, et comparer ce que tu en apprendras.
    A noter aussi que c'est écrit direct sur le forum sans phase de compilation, donc je te garantis pas que ça compile direct.

    data.h (qui devrait d'ailleurs s'appeler meuble.h)
    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
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    #ifndef MEUBLE_H
    #define MEUBLE_H
     
    #include <qstring.h>
    #include <qvector.h>
     
    class Meuble
    {
    public:
        // constructeurs
        Meuble(const QString &intitule, const QString& type, const QString& couleur,
                  int ref, int qte);
        Meuble(const Meuble &other);
     
        // On definit les accesseurs
        const QString& intitule() const
        { return _intitule; }
     
        const QString& type() const
        { return _type; }
     
        const QString& couleur() const
        { return _couleur; }
     
        int ref() const
        { return _ref; }
     
        int qte() const
        { return _qte; }
     
    private:
        QString _intitule;
        QString _type;
        QString _couleur;
        int _ref;
        int _qte;
    };
     
    // Typedef par souci de clarté et d'uniformité
    typedef QVector<Meuble> Meubles;
     
    // Choix du conteneur à définir selon le lien fourni plus haut
    Meubles meublesFromFile(const QString &fileName);
     
    #endif
    data.cpp (ou meuble.cpp )
    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
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    #include "data.h" // ou meuble.h, t'as compris le truc
    Meuble::Meuble(const QString &intitule, const QString& type, const QString& couleur,
                  int ref, int qte)
    :_intitule(intitule), _type(type), _couleur(couleur), 
     _ref(ref), _qte(qte)
    {
    }
     
    Meuble::Meuble(const Meuble &other)
    {
        _intitule = other._intitule;
        _type    = other._type;
        _couleur= other._couleur;
        _ref      = other._ref;
        _qte     = other._qte;
    }
     
    Meubles meublesFromFile(const QString &fileName)
    {
        QFile f(fileName);
     
        if(!f.open(IO_ReadOnly))
        {
            //Erreur d'ouverture du fichier
            qDebug("Failed to open file.");
        }
     
        // Extraction des informations depuis le fichier
        QTextStream ts( &f );
        Meubles meubles;
        QString intitule, type, couleur;
        int ref, qte;
        while(!ts.atEnd( ))
        {
            ts >> ref;
            ts >> intitule;
            ts >> type;
            ts >> couleur;
            ts >> qte;
            meubles.push_back(Meuble(intitule, type, couleur, ref, qte));
        }
     
        return meubles;
    }
    Et ensuite, le chargement proprement dit depuis ton interface sera juste:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Meubles meubles = meublesFromFile("meubles.txt");

  16. #16
    Membre confirmé
    Inscrit en
    Novembre 2006
    Messages
    91
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 91
    Par défaut
    Citation Envoyé par IrmatDen Voir le message
    Voilà comment je vois la chose (compte tenu de ce que tu en as dit pour l'instant bien sûr)

    Bon, je ne saurais que trop te recommander de bien comprendre les modifications apportées au passage, relire nos 2 codes, et comparer ce que tu en apprendras.
    A noter aussi que c'est écrit direct sur le forum sans phase de compilation, donc je te garantis pas que ça compile direct.

    data.h (qui devrait d'ailleurs s'appeler meuble.h)
    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
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    #ifndef MEUBLE_H
    #define MEUBLE_H
     
    #include <qstring.h>
    #include <qvector.h>
     
    class Meuble
    {
    public:
        // constructeurs
        Meuble(const QString &intitule, const QString& type, const QString& couleur,
                  int ref, int qte);
        Meuble(const Meuble &other);
     
        // On definit les accesseurs
        const QString& intitule() const
        { return _intitule; }
     
        const QString& type() const
        { return _type; }
     
        const QString& couleur() const
        { return _couleur; }
     
        int ref() const
        { return _ref; }
     
        int qte() const
        { return _qte; }
     
    private:
        QString _intitule;
        QString _type;
        QString _couleur;
        int _ref;
        int _qte;
    };
     
    // Typedef par souci de clarté et d'uniformité
    typedef QVector<Meuble> Meubles;
     
    // Choix du conteneur à définir selon le lien fourni plus haut
    Meubles meublesFromFile(const QString &fileName);
     
    #endif
    data.cpp (ou meuble.cpp )
    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
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    #include "data.h" // ou meuble.h, t'as compris le truc
    Meuble::Meuble(const QString &intitule, const QString& type, const QString& couleur,
                  int ref, int qte)
    :_intitule(intitule), _type(type), _couleur(couleur), 
     _ref(ref), _qte(qte)
    {
    }
     
    Meuble::Meuble(const Meuble &other)
    {
        _intitule = other._intitule;
        _type    = other._type;
        _couleur= other._couleur;
        _ref      = other._ref;
        _qte     = other._qte;
    }
     
    Meubles meublesFromFile(const QString &fileName)
    {
        QFile f(fileName);
     
        if(!f.open(IO_ReadOnly))
        {
            //Erreur d'ouverture du fichier
            qDebug("Failed to open file.");
        }
     
        // Extraction des informations depuis le fichier
        QTextStream ts( &f );
        Meubles meubles;
        QString intitule, type, couleur;
        int ref, qte;
        while(!ts.atEnd( ))
        {
            ts >> ref;
            ts >> intitule;
            ts >> type;
            ts >> couleur;
            ts >> qte;
            meubles.push_back(Meuble(intitule, type, couleur, ref, qte));
        }
     
        return meubles;
    }
    Et ensuite, le chargement proprement dit depuis ton interface sera juste:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Meubles meubles = meublesFromFile("meubles.txt");
    merci pour votre aide,, j'ai fait de ce que vous m'avez conseiller.

    voila le récapulatif de mon projet.

    Mes fichiers
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    main.cpp
    classe Mere
    classe Saisi
    calsse Meuble
    Dans class Meuble
    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
     
    #ifndef MEUBLE_H
    #define MEUBLE_H
     
    #include <qstring.h>
     
    class Meuble
    {
    public:
     
     
       QString   intitule[5],
                     type[5],
                     couleur[5];
       int ref[5],
       qte[5];
     
     
    };
     
    #endif
    dans class Mere

    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
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
     
     
    /****************************************************************************
    ** ui.h extension file, included from the uic-generated form implementation.
    **
    ** If you want to add, delete, or rename functions or slots, use
    ** Qt Designer to update this file, preserving your code.
    **
    ** You should not define a constructor or destructor in this file.
    ** Instead, write your code in functions called init() and destroy().
    ** These will automatically be called by the form's constructor and
    ** destructor.
    *******************************************************************/  
    Meuble m;
    #include "meuble.h"
     
     
         void Mere::init()
    {     int i=0;
     
          // Lancer l'horlige
         QTimer * timer = new QTimer(this);
        connect( timer, SIGNAL(timeout()), this, SLOT(heure()) );
       timer->start(1000, FALSE ); 
     
     
        //Lecture du fichier
     
        QFile f( "meubles.txt" );
       //Ouverture du fichier
        if( !f.open( IO_ReadOnly  ))
     
     {
       //Erreur d'ouverture du fichier
        std::cout << "Failed to open file." << std::endl;
     }
     
      QTextStream ts( &f );
      while(!ts.eof( )&&(i<5))
      {
      ts >>  m.ref[i] ;
      ts >> m.type[i] ;
      ts >> m.intitule[i];
      ts >> m.couleur[i];
      ts >> m.qte[i];
      i++;
     
     
     
     
     
     
    }
     
     
    }
     
     
     
     
     
    void Mere::dlgsaisi()
    {
     
       // Création d'un nouveau dialogue
      Saisi dlgs( this );
      dlgs.exec();
     /*
     // Saisir les donn�es
     
     
     
     
     //appui sur enregistrer
     if (dlgs.a_enr->isClicked())
     {
         
         
         while(m.ref[i])
         
         {
         
    	 if(m.ref[i]==dlgs.ref->text())
     
    	 {
         
    	           QMessageBox::information(0, tr("Error"), tr("Foo error %1").arg(m.ref[0]));
       
    	 }
         
     }
     */
     
     
     
     
     
     
     
    }
     
     
    void Mere::heure()
    {
       time_t t;
       time(&t);     
       a_heure->clear();
       a_heure ->setText(ctime(&t));  
       QMessageBox::information(0, tr(""), tr("%1").arg(m.ref[0]));
     
    }
    classe Saisi
    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
    /****************************************************************************
    ** ui.h extension file, included from the uic-generated form implementation.
    **
    ** If you want to add, delete, or rename functions or slots, use
    ** Qt Designer to update this file, preserving your code.
    **
    ** You should not define a constructor or destructor in this file.
    ** Instead, write your code in functions called init() and destroy().
    ** These will automatically be called by the form's constructor and
    ** destructor.
    *****************************************************************************/
    
    void Saisi::saisi()
    {
    //je veux utiliser l'objet  de la classe Mere 'm' comment faire?
         
    }
    comment faire pour récupere les données d'une fênetre mère dans un autre fênetre (boite de dialigue)? merci

  17. #17
    Membre Expert

    Avatar de IrmatDen
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 727
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 727
    Par défaut
    Ouais, donc à voir ton code, t'as rien fait ni compris de ce que j'ai écris...

  18. #18
    Membre confirmé
    Inscrit en
    Novembre 2006
    Messages
    91
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 91
    Par défaut
    Citation Envoyé par IrmatDen Voir le message
    Ouais, donc à voir ton code, t'as rien fait ni compris de ce que j'ai écris...
    j'ai chagé les variables.. dans la classe mère dans la mèthode init()...
    aprés quand je clique sur le lien du menu saisir un nouveau objet.. une boite de dialogue s'affiche . alors dans cette boite de dialogue je veux acceder au donnée chagées dans la classe Mere. .. pour tetes les doublures et autre choses.
    comment faire svp?

Discussions similaires

  1. Réponses: 9
    Dernier message: 04/03/2011, 11h58
  2. Réponses: 5
    Dernier message: 23/11/2006, 13h55
  3. [FLASH MX2004] [AS2] Accès aux variables d'une classe
    Par stailer dans le forum ActionScript 1 & ActionScript 2
    Réponses: 2
    Dernier message: 17/07/2005, 12h58
  4. [Language]Accès aux variables
    Par Adaemon dans le forum Langage
    Réponses: 12
    Dernier message: 27/04/2005, 14h17
  5. Acces à une variable-tableau de PHP
    Par Erwan21 dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 09/02/2005, 13h55

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