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 :

Héritage et accès aux variables

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 31
    Par défaut Héritage et accès aux variables
    Bonjour,

    Je viens vous faire part d'un problème d'héritage que je n'arrive pas à résoudre.

    Dans mon appli, j'ai des fenêtres qui doivent avoir certains comportements identiques (mise à jour de préférences, ...).

    J'ai donc une classe TDialog qui hérite de QDialog qui a une méthode virtuelle pure. Cette classe sert de base pour toutes mes fenêtres.

    Dans un premier temps, à partir du designer, j'ai créé des fenêtres (.cpp, .h et .ui) en héritant de QDialog. Je met ensuite le code à jour en remplaçant QDialog par TDialog et en implémentant la méthode virtuelle. Jusque là, pas de problème. TDialog est simplement constituée d'un .cpp et d'un .h.

    Au cours du développement, je me suis rendu compte que j'aurai besoin d'avoir des fenêtres quasiment identiques (le comportement des boutons de l'ihm entre autre) à quelques détails près.

    J'ai donc décidé de faire une classe TDialogGestionListe qui hérite de TDialog. Cette classe vient avec son .cpp, le .h et un .ui.

    Mon problème apparait maintenant.
    Si je créé une classe (cpp et h seulement, le ui vient de TDialogGestionListe ) TTest qui hérite de TDialogGestionListe, je ne peux pas accéder à ui.

    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
    27
    #ifndef TDIALOG_H
    #define TDIALOG_H
     
    #include <QDialog>
     
    #include "tools.h"
     
    class TDialog : public QDialog
    {
        Q_OBJECT
    public:
        explicit TDialog(QWidget *parent = 0);
     
        virtual void setMode() = 0;
     
     
    signals:
     
    public slots:
        virtual void initPreferences() = 0;
     
    protected:
        e_role m_role;
     
    };
     
    #endif // TDIALOG_H


    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
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    #ifndef TDIALOGGESTIONLISTE_H
    #define TDIALOGGESTIONLISTE_H
     
    #include <QModelIndex>
    #include <QSqlRelationalTableModel>
     
    #include "tdialog.h"
     
    namespace Ui {
        class TDialogGestionListe;
    }
     
    class TDialogGestionListe : public TDialog
    {
        Q_OBJECT
     
    public:
        explicit TDialogGestionListe(QWidget *parent = 0);
        ~TDialogGestionListe();
     
        void setAlternatingRowColors(bool alternate);
        void setRowColor1(QColor color);
        void setRowColor2(QColor color);
     
        virtual void setMode();
        void modeConsultation();
        void modeSelection();
     
     
    private:
        virtual void initTableau() = 0;
     
    public slots:
        void initPreferences();
        void modeEdition();
     
    protected:
        Ui::TDialogGestionListe *ui;
     
        QSqlRelationalTableModel * m_model;
        bool m_filtreIsOn;
     
        QColor m_color1;
        QColor m_color2;
        bool m_alternateRowColor;
     
        int m_nbAjouts;
        int m_idMax;
     
        bool m_donneeIsReference;
    };
     
    #endif // TDIALOGGESTIONLISTE_H


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    class TTest : public TDialogGestionListe
    {
        Q_OBJECT
    ....
     
    }

    Dans la classe TTest, je ne peux pas faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ui->monBouton->setVisible(false);
    par exemple.



    QDialog <- TDialog <-TDialogGestionListe <- TTest

  2. #2
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 035
    Par défaut
    Salut
    Citation Envoyé par zhebulonn Voir le message
    Mon problème apparait maintenant.
    Si je créé une classe (cpp et h seulement, le ui vient de TDialogGestionListe ) TTest qui hérite de TDialogGestionListe, je ne peux pas accéder à ui.
    Comment cela?

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 31
    Par défaut
    J'avoue que je n'est pas été clair

    Voila le message du compilateur :
    ..\monapp\ttest.cpp:34: error: invalid use of incomplete type 'struct Ui::TDialogGestionListe'

    ..\mopapp\/tdialoggestionliste.h:10: error: forward declaration of 'struct Ui::TDialogGestionListe'

    et voici le code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    /**
      @brief contructeur
      */
    TTest::TTest(QWidget *parent) :
        TDialogGestionListe(parent)
    {
        ui->m_pbAnnulerFiltre->setEnabled(false);
        ui->m_pbFiltrer->setEnabled(false);
        ui->m_swEdition->setCurrentIndex(0);
    }
    J'ai la même erreur pour toutes les lignes où j'essaye d'acceder à "ui"

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

  4. #4
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 035
    Par défaut
    C'est juste qu'il ne sait pas a quoi ressemble ui.
    Il te faut faire un include dans ttest.cpp du .h qui définie Ui::TDialogGestionListe.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 31
    Par défaut
    MAIS OUI !!!

    Merci beaucoup !

    J'avais pas fait gaffe que ce fichier est inclu dans le cpp de TDialogGestionListe

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

Discussions similaires

  1. [FLASH MX] Accès aux variables
    Par renofx1 dans le forum Flash
    Réponses: 4
    Dernier message: 21/12/2005, 15h30
  2. Acces aux variables d'une DLL
    Par abignon dans le forum MFC
    Réponses: 1
    Dernier message: 08/09/2005, 14h29
  3. [C#] Accès aux variables Session
    Par kalan dans le forum ASP.NET
    Réponses: 9
    Dernier message: 31/08/2005, 16h40
  4. [FLASH MX2004] [AS2] Accès aux variables d'une classe
    Par stailer dans le forum ActionScript 1 & ActionScript 2
    Réponses: 2
    Dernier message: 17/07/2005, 12h58
  5. [Language]Accès aux variables
    Par Adaemon dans le forum Langage
    Réponses: 12
    Dernier message: 27/04/2005, 14h17

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