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 :

Résolution de portée


Sujet :

Qt

  1. #1
    Membre habitué Avatar de sardik
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    135
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2009
    Messages : 135
    Points : 143
    Points
    143
    Par défaut Résolution de portée
    Bonjour,

    En faite je souhaiterais implémenter la méthode virtuelle :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    virtual void wheelEvent ( QWheelEvent * event )
    Cette méthode appartient à la classe QGraphicsView.

    Je voudrais savoir si il est possible de ré-implémenter la méthode sans utiliser d'héritage.

    J'ai instancié dans mon programme un objet de Type QGraphicsView et je voudrais lui implémenter cette méthode virtuelle.

    Si je met la résolution de portée aux QGraphicsView j'ai un message du style :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    warning: non-inline function 'virtual void QGraphicsView::wheelEvent(QWheelEvent*)' is defined after prior declaration as dllimport: attribute ignored
    Comment faire? merci

  2. #2
    Membre actif Avatar de cayou66
    Inscrit en
    Décembre 2008
    Messages
    286
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations forums :
    Inscription : Décembre 2008
    Messages : 286
    Points : 273
    Points
    273
    Par défaut
    A ma connaissance, tu ne peux pas faire ça, cela va à l'encontre du principe objet du C++. Pourquoi tu ne souhaites pas faire un "public: QGraphicsView" ?

  3. #3
    Membre habitué Avatar de sardik
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    135
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2009
    Messages : 135
    Points : 143
    Points
    143
    Par défaut
    Car mon .cpp correspond à un Widget qui possède un QGraphicsView à l'intérieur et je n'ai pas envie de créer un autre .cpp avec un autre .h uniquement pour pouvoir implémenter une seule méthode virtuelle.

    En gros c'est pour des raisons d'organisation au niveau du nombre de fichier à gérer.

  4. #4
    Membre habitué Avatar de sardik
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    135
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2009
    Messages : 135
    Points : 143
    Points
    143
    Par défaut
    Donc c'est sûr je suis obligé de faire un héritage pour implémenter une méthode virtuelle ?

  5. #5
    Modérateur
    Avatar de nouknouk
    Homme Profil pro
    Inscrit en
    Décembre 2006
    Messages
    1 655
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 655
    Points : 2 161
    Points
    2 161
    Par défaut
    Citation Envoyé par sardik Voir le message
    Donc c'est sûr je suis obligé de faire un héritage pour implémenter une méthode virtuelle ?
    En Java, il existe le concept d'anonymous classes pour définir une classe qui hérite d'une autre et surcharger une fonction directement à l'endroit où le 'new' est fait.

    En C++, ce concept n'existe pas. Tu est donc obligé de faire une classe séparée.

    Mais si tu veux éviter la prolifération de fichiers supplémentaires, rien ne t'empêche de définir ta classe à l'intérieur de la classe de base, c'est le concept d'inner class

    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
     
    class MonWidget : public QWidget {
    public:
        MonWidget();
        ~MonWidget();
     
        class MonGraphicsView : public QGraphicsView{
            public:
            MonGraphicsView();
            virtual void wheelEvent ( QWheelEvent * event );
        };
     
    private:
        MonGraphicsView* view;
    };
     
    MonWidget::MonWidget() {
        item = new MonGraphicsView();
    }
     
    void MonWidget::MonGraphicsView::wheelEvent ( QWheelEvent * event )
    {
       /* bla bla bla */
    }

  6. #6
    Membre habitué Avatar de sardik
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    135
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2009
    Messages : 135
    Points : 143
    Points
    143
    Par défaut
    Ok merci!

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

Discussions similaires

  1. [PHP] L'opérateur de résolution de portée (::)
    Par dorian53 dans le forum Langage
    Réponses: 4
    Dernier message: 22/01/2009, 10h13
  2. Bonne pratique : Résolution de portée ou référence ?
    Par FrontLine dans le forum Langage
    Réponses: 20
    Dernier message: 20/05/2008, 09h31
  3. Réponses: 2
    Dernier message: 17/02/2007, 04h34
  4. l'opérateur de résolution de portée (::)
    Par malikoo dans le forum C++
    Réponses: 2
    Dernier message: 19/12/2005, 13h08
  5. [Kylix] Kylix / port serie
    Par Anonymous dans le forum EDI
    Réponses: 3
    Dernier message: 01/04/2002, 12h07

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