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 :

Héritage de classe avec QString

  1. #1
    Invité
    Invité(e)
    Par défaut Héritage de classe avec QString
    Bonjour la communauté ,

    Je Voudrais utiliser cette classe dans mon MainWindow avec mes QLineEdit et QSpinBox :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    class Humain {
     
    int pNom;
    public:
    Humain(QString *nom, QString *prenom, int age){
        nom="Madame Kipu";
        prenom="Lucifer";
        age=300;}
    private :
            QString *nom;
            QString *prenom;
            int age;
    };
    seulement le compilateur me reponds sauvagement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    error: cannot convert ‘const char [8]’ to ‘QString*’ in assignment
    error: cannot convert ‘const char [10]’ to ‘QString*’ in assignment
    donc j'ai cru comprendre qu'il fallait que j'utilise cette methode de QString : toStdString() de ce forum : http://www.developpez.net/forums/d35...-qstring-char/ ! seulement j'y comprends rien du tout, j'ai bien essaye de remplacer mes QString par des char mais la suite je suis un peu perdu HELP !!!
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    class Humain {
     
    int pNom;
    public:
    Humain(char *nom, char *prenom, int age){
        nom="Madame Kipu";
        prenom="Lucifer";
        age=300;}
    QString convertNom(char *nom){/**  quoi mettre? **/ return nomString;}
    private :
            char *nom;
            char *prenom;
            int age;
    };
    nb : la classe c'est juste un juste un exo mais j'aimerais bien pouvoir reproduire ce schema sur des projets plus reels, histoire de separer sur mon mainwindow la provenance des differentes valeurs affichés & gérées à savoir utiliser efficacememnt les differents setter/getter de la QT ! merci d'avance !
    par exemple un spinbox ki gere 3 types de professionssous forme d'enum , sachant que ces 3 professions sont dans 3 classes differentes ! bah oui un medecin ,1 infirmier et agent de maintenance n'ont pas les memes specificité dans leur travail mais on retrouvera quand meme nom, prenom, age ! avec redefinition de methode pour changer la profession !!!

    bref merci d'avance !!!
    Dernière modification par dourouc05 ; 25/10/2013 à 12h50.

  2. #2
    Invité
    Invité(e)
    Par défaut
    trouvé merci pour le derangement Humain::Humain(QString *nom){nom=new QString("Madame Kipu");}

  3. #3
    Membre expérimenté

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2009
    Messages
    1 009
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2009
    Messages : 1 009
    Points : 1 738
    Points
    1 738
    Par défaut
    Bonjour,

    Aucune raison d'utiliser des pointeurs et d'allouer ces variables membres sur le tas, si ?

    Et si y'a une bonne raison, n'oublie pas le destructeur et les delete, sinon fuites mémoire.

  4. #4
    Invité
    Invité(e)
    Par défaut
    ben je galere jai bien compris obligatoire sinon j'oublie la communication dans ma classe !!oui oui je sais destructeur delete !! mais j'ai quand meme encore un souci !! et si je veux changer mes instances de variables !! bah oui rajouter des perso !! mais je sais faut que je me debrouille donc merci du rappel

  5. #5
    Membre éclairé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2010
    Messages
    434
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2010
    Messages : 434
    Points : 654
    Points
    654
    Par défaut
    Va voir du coté des références

  6. #6
    Invité
    Invité(e)
    Par défaut j'y comprends plus rien
    je compile je me prends ca : humain.cpp:6: undefined reference to `vtable for Humain'
    bon je regarde dans le FAQ de la qt je vois qu'il faut rajouter une macro Q_OBJECT
    je change mon projet pour qu'il passe en STL ous code block alors que je change rien ou presque (QString pour string ) !!! ca marche bizar !!!
    je re crée un projet vide sous qt creator avec juste une fonction main.cpp et
    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
     
    #include <QtCore>
     
    class Humain
    {
     
    public:
        Humain(QString nom, QString prenom);
        Humain(int age);
     
        void setNom(QString nom);
        QString getNom();
        void setAge(int age);
        int getAge();
     
        ~Humain(){delete this;}
    private :
        QString pNom;
        QString pPrenom;
        int pAge;
    };
     
    int main()
    {
        Humain *seb;
        seb=new Humain("Mr Dantesque","leo");
        seb=new Humain(18);
        seb->setAge(18);
        qDebug() << "Hello world!" << endl;
        return 0;
    }
     
        Humain::Humain(QString nom, QString prenom) :
            pNom(nom),
            pPrenom(prenom)
    {}
        Humain::Humain(int age):pAge(age) {}
        void Humain::setNom(QString nom){pNom=nom;}
        QString Humain::getNom(){return pNom;}
        void Humain::setAge(int age){pAge=age;}
        int  Humain::getAge(){return pAge;}
    là ca marche alors que dans mon Mainwindow à la base ya ca :
    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
     
    MainWindow::MainWindow(QWidget *parent) :
        QMainWindow(parent),
        ui(new Ui::MainWindow)
    {
        ui->setupUi(this);
    QString n="Mr Dantesque";
    QString p="leo";
    //int a=18;
    //Humain *seb;
    //seb=new Humain(n,p,a);
    //seb=new Humain(&a);
     
    //seb->getAge();
      ui->lineEdit->setText("salut");
     
    }
    bon j'ai configuré pour quil crée mes classes par agrégation par pointeur m'enfin sinon ya un QLineEdit dans la GUI et puis ce tout .
    non franchement les mysteres de la Qt me depasse

  7. #7
    Membre émérite
    Avatar de Daïmanu
    Homme Profil pro
    Développeur touche à tout
    Inscrit en
    Janvier 2011
    Messages
    696
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur touche à tout

    Informations forums :
    Inscription : Janvier 2011
    Messages : 696
    Points : 2 439
    Points
    2 439
    Par défaut
    Il y a du mieux, mais
    Citation Envoyé par attilanumerobis Voir le message
    non franchement les mysteres de la Qt me depasse
    je pense que ton problème vient non pas de Qt, mais de tes connaissances en C++:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        ~Humain(){delete this;}
    Enlève moi cette ligne tout de suite, non seulement tu n'as plus besoin de destructeur puisque tu n'as plus de pointeur en interne, mais en plus tu supprimes deux fois l'objet.

    Si tu persiste à vouloir utiliser les pointeurs, c'est à celui qui a la responsabilité de créer l'objet (= là où est fait le new) qui devrait supprimer l'objet. Ton delete devrait être placé dans le main. Ou bien supprime les pointeurs, ce qui devrait simplifier ton code.

    Maintenant si j'ai bien compris, tu cherche à passer cet objet Humain à un QLineEdit et QSpinBox ?

    Si oui eh bien tu as déjà les méthode getNom() et getAge() que tu peux utiliser à chaque appel de lineEdit->setText() et spinBox->setValue() respectivement.
    Je fais appel aux esprits de Ritchie, Kernighan, Stroustrup et Alexandrescu
    Donnez moi la force, donnez moi le courage de coder proprement !

    « Ça marche pas » n'est PAS une réponse convenable, merci de détailler le souci en fournissant l’environnement, le code source, les commandes et les messages d'erreur.

    Ce club possède également un clavardage, on y trouve quelques perles entre deux sessions d'entraides.

  8. #8
    Invité
    Invité(e)
    Par défaut merci
    je peche par ignorance du destructeur j'avoue !!! en meme temps à trouver des exo la dessus !!! !! ce lair viré cette ligne et ca va mieux

    et oui à la base c'etait ca mon souci !! afficher les valurs de mon objet la dedans et je me suis pris des souci de QString !! merci

    la dessus j'ai retrouvé un veux tuto de Mateo21 :son fameux generateur de classes donc souci réglé

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

Discussions similaires

  1. Héritage Java (problème avec la classe test)
    Par adil-01 dans le forum Général Java
    Réponses: 7
    Dernier message: 04/12/2011, 16h25
  2. Instanciation d'une classe avec héritage QSettings
    Par bigtouf dans le forum Débuter
    Réponses: 2
    Dernier message: 11/10/2011, 21h44
  3. Système de classe, avec héritage multiple dynamique
    Par kimjoa dans le forum Contribuez
    Réponses: 0
    Dernier message: 09/01/2010, 18h07
  4. Réponses: 1
    Dernier message: 09/11/2009, 18h02
  5. Héritage d'une classe avec constructeur privé
    Par Braillane dans le forum Langage
    Réponses: 13
    Dernier message: 02/09/2009, 11h59

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