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 Creator Discussion :

Classe héritant d'une classe fournissant la GUI avec Qt Designer


Sujet :

Qt Creator

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2014
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2014
    Messages : 30
    Points : 21
    Points
    21
    Par défaut Classe héritant d'une classe fournissant la GUI avec Qt Designer
    Bonjour,

    J'ai conçu une fenêtre avec Qt Designer (avec QMainWindow) qui comprend une barre de menus, une graphicsView et un layout avec des boutons (Initialiser, Lancer et Arreter).
    Je considère cette fenetre comme une IHM générique. C'est-à-dire que si j'ai envie de faire un jeu de type Snake, de l'animation...alors je procède ainsi:
    - Supposons que je veuille faire de l'animation (d'objets géométriques, etc...)
    - Alors je créé une classe MonGUIAnim héritant de IHM
    - Dans le constructeur de ma classe MonGUIAnim, j'appelle le constructeur de IHM (pour construire la fenetre réalisée avec Qt Designer) mais je la complète en disant que si j'appuie sur le bouton "Initialiser" alors il utilise un slot qui servira à construire le contenu de la scene.

    Est-ce que vous savez si c'est possible ?

    Dans le constructeur de MonGUIAnim :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    MonGUIAnim::MonGUIAnim()
    {
        IHM();
        connect(ui->buttonInit, SIGNAL(released()), this, SLOT(initScene()));
    }
    MonGUIAnim.h

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    class MonGUIAnim : public IHM
     
    {
        Q_OBJECT
    private:
        //QGraphicsScene *scene; // commenté car j'ignore si je le place là ou dans IHM section "protected"
    public slots:
        void initScene();
    public:
        MonGUIAnim();
    };
    Merci de votre aide

  2. #2
    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 438
    Points
    2 438
    Par défaut
    Bonsoir.

    Oui c'est possible mais d'abord une clarification :
    Ce que tu appelles IHM est la classe QWidget, dont tous les widgets héritent (QLabel, QPushButton, QLineEdit, etc...)

    Qt fourni un système pour dessiner en mode canvas : les classes QGraphicsView et QGraphicsScene.

    Comme QGraphicsView hérite de QWidget, c'est de cette classe dont MonGuiAnim va hériter. Et cette classe va contenir les slots et la QGraphicsScene.
    Après il suffit de jouer avec la scène et ses méthodes pour dessiner ce que tu veux.
    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.

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2014
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2014
    Messages : 30
    Points : 21
    Points
    21
    Par défaut
    Merci Daïmanu pour ta réponse

    Ma classe IHM hérite en fait de QMainWindow (à la création du fichier ui par QtCreator j'avais le choix entre QMainWindow, QWidget et QDialog).
    Dans le doute voici le code de IHM.h

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    class IHM : public QMainWindow
    {
        Q_OBJECT
     
    public:
        explicit IHM(QWidget *parent = 0);
        ~IHM();
    protected:
        Ui::IHM *ui;
        QGraphicsScene *scene;
    };
    Et le code du constructeur de IHM :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    IHM::IHM(QWidget *parent):
        QMainWindow(parent),
        ui(new Ui::IHM)
    {
        ui->setupUi(this);
    }

    Comme QGraphicsView hérite de QWidget, c'est de cette classe dont MonGuiAnim va hériter. Et cette classe va contenir les slots et la QGraphicsScene.
    Après il suffit de jouer avec la scène et ses méthodes pour dessiner ce que tu veux.
    C'est pas bête j'avais pas pensé à cette solution, vu que effectivement je ne souhaite toucher qu'à la scene et aux boutons. Maintenant à voir car j'intégrerai éventuellement si le temps me le permets un fichier de configuration (QSettings) qui stockera les paramètres de la scene (couleur par exemple) ou encore la résolution de la fenetre...

Discussions similaires

  1. Réponses: 3
    Dernier message: 14/07/2012, 19h39
  2. Instanciation d'une classe fille depuis une classe mère
    Par khaled-benloucif dans le forum Langage
    Réponses: 2
    Dernier message: 30/01/2009, 23h59
  3. Réponses: 7
    Dernier message: 25/08/2008, 16h13
  4. Réponses: 2
    Dernier message: 02/02/2008, 07h37
  5. Réponses: 8
    Dernier message: 20/07/2007, 14h28

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