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 :

Dessiner sur un QWidget ou un QGLWidget

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2009
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 5
    Par défaut Dessiner sur un QWidget ou un QGLWidget
    Bonjour,

    Je cherche à permettre le choix entre dessiner sur un QWidget ou sur un QGLWidget (qui sera mis en centralWidget dans un QMainWindow). J'ai réussi à faire les deux séparément mais j'aimerai faire cela proprement.

    J'avais pour idée de créer une classe abstraite héritant de QWidget dont je ferai hériter une classe Widget et la classe GLWidget.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    switch (choix)
    {
         case  qt : centralWidget = new Widget();
         case opengl : centralWidget = new GLWidget();
    }
    this->setCentralWidget(centralWidget);
    Est-ce possible ?

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


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

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

    Informations forums :
    Inscription : Mai 2008
    Messages : 27 129
    Billets dans le blog
    150
    Par défaut
    Bonjour,

    Oui, vous pouvez, car les deux héritent de QWidget.

    Après, il faut aussi vérifier si la machine est compatible avec OpenGL avant de lancer OpenGL
    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
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2009
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 5
    Par défaut
    Citation Envoyé par LittleWhite Voir le message
    Bonjour,

    Oui, vous pouvez, car les deux héritent de QWidget.

    Après, il faut aussi vérifier si la machine est compatible avec OpenGL avant de lancer OpenGL
    D'accord mais comment fait-on pour ajouter une méthode (commune au deux classes) mais qui ne se trouve pas dans QWidget ?
    A priori, on est obligé de redéfinir une classe héritant de QWidget (ou QGLWidget) pour redéfinir la méthode paintEvent() afin de faire dessiner ce que l'on veut.
    Mais surtout j'ai besoin de faire une méthode me permettant d'envoyer une image à dessiner.

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


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

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

    Informations forums :
    Inscription : Mai 2008
    Messages : 27 129
    Billets dans le blog
    150
    Par défaut
    Vous faites une classe, qui déclare une méthode virtuelle, qui sera hérité par vos deux classes héritant aussi de QGLWidget et QWidget.
    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.

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

    Informations forums :
    Inscription : Août 2009
    Messages : 5
    Par défaut
    Citation Envoyé par LittleWhite Voir le message
    Vous faites une classe, qui déclare une méthode virtuelle, qui sera hérité par vos deux classes héritant aussi de QGLWidget et QWidget.
    Héritage multiple ?
    Je ne vois pas très bien comment l'utiliser ici, en reprenant le code en haut :
    si je déclare centralWidget comme QWidget* la fonction setImage() lui sera toujours inconnu :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    class Abstraite
    { [...]
    virtual void setImage();
    }
     
    class Widget : public QWidget, Abstraite { [...] }
     
    class GLWidget: public QGLWidget, Abstraite { [...] }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    QWidget * centralWidget;
    switch (choix)
    {
         case  qt : centralWidget = new Widget();
         case opengl : centralWidget = new GLWidget();
    }
    this->setCentralWidget(centralWidget);

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


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

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

    Informations forums :
    Inscription : Mai 2008
    Messages : 27 129
    Billets dans le blog
    150
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    QWidget * centralWidget; 
    switch (choix) 
    {      
    case  qt : centralWidget = new Widget();      
        case opengl : centralWidget = new GLWidget(); 
    } 
    this->setCentralWidget(centralWidget);
    En effet.
    Il faut faire plus du genre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Widget* pWidget = new Widget(this);
    GLWidget* pGLWidget = new GLWidget(this);
    Abstraite* pAbs;
    switch (choix) 
    {      
    case  qt : centralWidget = pWidget; pAbs = pWidget; delete pGLWidget; break;
        case opengl : centralWidget = pGLWidget; pAbs = pGLWidget; delete pWidget; break;
    } 
    this->setCentralWidget(centralWidget);
    Et vous utilisez pAbs pour vos besoin.
    Je pense que ce code marche, par contre, il y a surement mieux à faire.
    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.

Discussions similaires

  1. [MFC] Dessiner sur un Owner Draw
    Par gwendo dans le forum MFC
    Réponses: 1
    Dernier message: 27/04/2005, 11h21
  2. Comment dessiner sur un Bitmap sans scintillement ?
    Par TOTO32 dans le forum Composants VCL
    Réponses: 3
    Dernier message: 10/01/2005, 10h11
  3. [Servlet] [Image] Dessiner sur une image
    Par gaia_dev dans le forum 2D
    Réponses: 5
    Dernier message: 01/09/2004, 17h11
  4. [Transparent] - Comment dessiner sur 2 TImage ?
    Par TOTO32 dans le forum Langage
    Réponses: 15
    Dernier message: 08/08/2004, 01h06
  5. Dessiner sur un Tbutton
    Par rvzip64 dans le forum Composants VCL
    Réponses: 2
    Dernier message: 02/06/2004, 09h06

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