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