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 :

Problème de redéfinition de QAbstractTransition


Sujet :

Qt

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2009
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 29
    Points : 17
    Points
    17
    Par défaut Problème de redéfinition de QAbstractTransition
    Bonjour,

    J'ai eu besoin de définir une transition en sous-classant QAbstractTransition.

    Ce que je veux faire, c'est que la transition s'effectue si le nombre passé en paramètre de l'event associé soit > 0

    Voici mon code :

    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
     
    struct PhasesRestantesEvent : public QEvent
    {
        PhasesRestantesEvent(const uint &val)
            : QEvent(QEvent::Type(QEvent::User+1)),
              value(val) {}
     
            QString value;
    };
     
    class et_TransitionPhasesRestantes : public QAbstractTransition
    {
    public:
         et_TransitionPhasesRestantes() {}
     
     protected:
         virtual bool eventTest(QEvent *e) const
         {
             if (e->type() != QEvent::Type(QEvent::User+1)) // PhasesRestantesEvent
                 return false;
             PhasesRestantesEvent *pre = static_cast<PhasesRestantesEvent*>(e);
             return (pre->value > 0);
         }
     
         virtual void onTransition(QEvent *) {}
    };
    Le problème, c'est que je ne peut pas instancier un objet de type et_TransitionPhasesRestantes. Le compilateur me dit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ../executiontest.cpp:73: error: cannot allocate an object of abstract type ‘et_TransitionPhasesRestantes’
    ../et_transitionphasesrestantes.h:49: note:   because the following virtual functions are pure within ‘et_TransitionPhasesRestantes’:
    /usr/include/qt4/QtCore/qabstracttransition.h:98: note: 	virtual bool QAbstractTransition::eventTest(QEvent*)
    Pourtant, la méthode est bien redéfinie!

    Merci de m'éclairer sur cette erreur dont je ne comprend pas la cause...

  2. #2
    Membre confirmé

    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Février 2005
    Messages
    464
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2005
    Messages : 464
    Points : 646
    Points
    646
    Par défaut
    Bonjour,

    Je n'ai pas exactement la réponse mais des choses me paraissent discutables :
    • Pourquoi définir PhasesRestantesEvent comme une structure si QEvent est une classe.
    • Je ne connais pas de constructeur QString qui prennent un uint en paramètre.



    Pour le constructeur de ta classe je ferais plutôt ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    et_TransitionPhasesRestantes(QState * sourceState = 0)
    La fonction virtuelle de la classe parent n'a pas de mot clé 'const' dans sa déclaration. Essaie sans ce mot clé.
    Selso.
    Ingénieur/CdP développement systèmes embarqués &

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2009
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 29
    Points : 17
    Points
    17
    Par défaut
    Pourquoi définir PhasesRestantesEvent comme une structure si QEvent est une classe :
    • Je me suis basé sur les exemples dispo dans la doc de Trolltech sur l'API QStateMachine.


    Je ne connais pas de constructeur QString qui prennent un uint en paramètre :
    • Erreur de ma part vite corrigée


    La fonction virtuelle de la classe parent n'a pas de mot clé 'const' dans sa déclaration. Essaie sans ce mot clé.
    • Je n'y avais même pas pensé, puisque le const est présent dans l'exemple de la doc officielle, et effectivement ça résous le problème


    Pour le constructeur de ta classe je ferais plutôt ça :
    • Pourquoi?

  4. #4
    Membre confirmé

    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Février 2005
    Messages
    464
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2005
    Messages : 464
    Points : 646
    Points
    646
    Par défaut C cool
    Bonjour,

    Puis-je savoir quel lien tu consultes ?
    Voici le mien :
    hébergement nokia

    J'utilise en général pour le constructeur d'une classe la même signature que la classe mère, + la valeur ajoutée. Cela facilite l'initialisation qui utilise des références avec la classe de base.

    Ravi d'avoir pu t'aider, n'oublies pas de marquer cette discussion résolue (y'a un bouton visible en dessous de la discussion).
    Selso.
    Ingénieur/CdP développement systèmes embarqués &

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2009
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 29
    Points : 17
    Points
    17
    Par défaut
    J'ai pris ces exemples sur http://qt.developpez.com/doc/latest/statemachine-api/

    Merci pour ton aide.

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

Discussions similaires

  1. problème de redéfinition de classe
    Par flashcordon dans le forum Langage
    Réponses: 5
    Dernier message: 18/02/2013, 16h17
  2. Réponses: 14
    Dernier message: 18/07/2011, 21h00
  3. Problème de redéfinition de class
    Par Nieli dans le forum Lisp
    Réponses: 3
    Dernier message: 09/04/2009, 00h46
  4. [POO] Problème de redéfinition de méthodes
    Par ShadowOfEden dans le forum C++
    Réponses: 8
    Dernier message: 15/12/2008, 02h10
  5. Réponses: 7
    Dernier message: 05/05/2006, 09h48

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