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 :

Modifier la valeur d'une classe parent


Sujet :

Qt

  1. #1
    Membre du Club
    Homme Profil pro
    Inscrit en
    Octobre 2007
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 45
    Points : 52
    Points
    52
    Par défaut Modifier la valeur d'une classe parent
    Bonjour,

    Je voudrais créer une classe héritée de QDate, en ajoutant l'information "Matin / Après-midi".
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    class DateEvenement : public QDate
    {
    public:
        void RecalculeDate ();
        bool matin;
    };
    La fonction RecalculeDate() doit recalculer la nouvelle date de l’événement, mais je ne sais pas comment modifier les valeurs (jour, mois, année) héritées de QDate. J'ai essayé ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    void DateEvenement::RecalculeDate ()
    {
       QDate dateTmp;
       dateTmp = ..... /* calcule la nouvelle date */
       if (.....) /* si la date doit être modifiée */
       {
          setDate (dateTmp);
          matin = ..... /* calcule si c'est le matin ou l'après-midi */
       }
    }
    Mais QDate::setDate() n'accepte pas une QDate comme argument. Je pourrais bien sûr utiliser la forme QDate::setDate(jour,mois, année) en décomposant dateTmp, mais je ne trouve pas ça très efficace ni très joli !

    Avez-vous une meilleure solution ?
    Merci d'avance pour votre aide.

  2. #2
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 865
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 865
    Points : 219 072
    Points
    219 072
    Billets dans le blog
    121
    Par défaut
    Bonjour,

    Je ne comprends pas pourquoi vous voulez hériter de QDate (autrement dit, je n'en vois pas l'intérêt).
    Sinon, vous pouvez utiliser les fonctions add* ou encore, setDate(myDate.year(), myDate.month(), myDate.day());.
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  3. #3
    Expert éminent
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Décembre 2015
    Messages
    1 568
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Décembre 2015
    Messages : 1 568
    Points : 7 670
    Points
    7 670
    Par défaut
    Bonjour,

    Tout d'abord, on peut se poser la question : est-ce une bonne idée d'hériter de QDate? Cela n'est viable que si toutes les fonctions de QDate ne changent pas de sens une fois devenue une DateEvenement. Il te faut donc potentiellement les reprendre toutes. Par exemple, si on appelle QDate::setDate() alors DateEvenement::matin doit être mis à jour. Ça n'est pas possible car QDate::setDate() n'est pas virtual et qu'on ne peut pas lui préciser si c'est le matin. Ça donc pas une bonne idée.

    On devrait pouvoir hériter de QDateTime, ici elle va naturellement "savoir" si c'est le matin, il suffit alors d'y ajouter une fonction setDate façon QDate avec un paramètre matin supplémentaire, et une fonction indiquant si c'est le matin (si heure < 12). La DateEvenement n'a alors plus de champ matin, car il est toujours calculable. Est-ce une bonne idée? Peut-être que non, mais ça ça peut marcher.

    Autre possibilité, la DateEvenement n'est pas une QDate mais contient une QDate. Là plus rien n'est interdit. On fait ce que l'on veut c'est un tout nouvel objet avec ses membres et ses fonctions. Cette inclusion peut être gérée sous la forme d'un "héritage privé" ou d'une inclusion simple c'est de la tambouille interne.

    Revenons à ton code. Qu'est que le fonction RecalculeDate() veut faire? On a une date (dans DQate) à la demi-journée prêt (dans matin), on on en fait quoi? Je ne comprend pas ce que l'on peut faire avec juste ces infos.
    Je ne vois pas ce qu'il pourrait y avoir dans tes ......, la seule ligne que je peux te fournir est ta ligne 8:
    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
    class DateEvenement : private QDate {  // Ça n'est plus un héritage
    public:
        DateEvenement(int y,int m,int d,bool am) : QDate(y,m,d), matin(am) {}
        void  setDate(int y,int m,int d,bool am) { QDate::setDate(y,m,d); matin=am; }
        void  RecalculeDate();  // !?
        bool  est_ce_matin()const { return matin; }
        int  year()const { return QDate::year(); }
        int  month()const { return QDate::month(); }
        int  day()const { return QDate::day(); }
        ... ... ...
    private:
        bool  matin;
    };
    ... ... ...
            *static_cast<QDate*>(this) = dateTmp;  // pour accéder au égal de QDate
            // ou bien
            QDate::setDate(dateTmp.year(),dateTmp.month(),dateTmp.day());

  4. #4
    Membre du Club
    Homme Profil pro
    Inscrit en
    Octobre 2007
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 45
    Points : 52
    Points
    52
    Par défaut
    Merci beaucoup Dalfab d'avoir passer du temps pour donner une réponse aussi détaillée.
    Je comprends un peu mieux l'héritage, et ce n'est en effet pas bien adapté à mon cas. Je vais plutôt intégrer une QDate dans ma classe.

  5. #5
    Responsable Qt & Livres


    Avatar de dourouc05
    Homme Profil pro
    Ingénieur de recherche
    Inscrit en
    Août 2008
    Messages
    26 625
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur de recherche
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2008
    Messages : 26 625
    Points : 188 610
    Points
    188 610
    Par défaut


    Citation Envoyé par genetin Voir le message
    Je comprends un peu mieux l'héritage, et ce n'est en effet pas bien adapté à mon cas.
    En général, l'héritage n'est pas une bonne solution, sauf quand tout est prévu pour ça (comme les widgets ou les interfaces abstraites). Tente toujours de passer par de la composition, c'est souvent une meilleure pratique (même si l'héritage se justifie dans certains cas, y compris l'héritage multiple).
    Vous souhaitez participer aux rubriques Qt (tutoriels, FAQ, traductions) ou HPC ? Contactez-moi par MP.

    Créer des applications graphiques en Python avec PyQt5
    Créer des applications avec Qt 5.

    Pas de question d'ordre technique par MP !

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

Discussions similaires

  1. [XSL] Comment modifier la valeur d'une variable?
    Par sorcer1 dans le forum XSL/XSLT/XPATH
    Réponses: 8
    Dernier message: 17/02/2010, 13h26
  2. Réponses: 9
    Dernier message: 04/05/2006, 17h33
  3. Réponses: 3
    Dernier message: 04/01/2006, 20h53
  4. Réponses: 6
    Dernier message: 30/09/2005, 16h24
  5. Conception d'une classe parente
    Par VincentB dans le forum Langage
    Réponses: 9
    Dernier message: 24/06/2003, 17h28

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