Précédent   Forum des professionnels en informatique > C et C++ > Bibliothèques > Qt
Qt Forum d'entraide technique sur la bibliothèque Qt. Avant de poster -> F.A.Q Qt
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 06/01/2012, 13h16   #1
Membre éprouvé
 
Avatar de MacPro
 
Inscription : novembre 2007
Messages : 354
Détails du profil
Informations personnelles :
Âge : 28
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : novembre 2007
Messages : 354
Points : 409
Points : 409
Par défaut Héritage multiple de QObject

Bonjour,

avant de commencer à expliquer mon problème je précise que j'ai cherché sur le forum et aussi sur la doc officielle mais je ne trouve pas ma solution (enfin pas exactement).

J'ai une classe abstraite qui hérite de QObject :

Voilà une classe abstraite dont devra hériter un object pour envoyer des signaux à un contrôleur.
C'est le contrôleur qui va se connecter à cette classe abstract. Cette classe n'a donc pas connaissance du contrôleur.
Le contrôleur possède un pointeur vers cette classe Abstract et y réalise ses connexions.
Le contrôleur tout comme cette classe Abstract doivent hériter de QObject pour être connectés.
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
class Abstract : public QObject
{
    Q_OBJECT
 
    public :
        Abstract(QObject*parent = 0);
        virtual ~Abstract();
 
    virtual void mustBeImplemented(void) = 0;
 
    signals :
        void aRandomSignal(void);
};

Code :
1
2
3
4
class Ui_MainWindow
{
    // générée par Qt Designer
};

Ici, c'est la classe à laquelle le contrôleur veut se connecter pour être le destinataire d'un signal.
Dans ce cas de figure, cette classe hérite de QMainWindow qui hérite lui même de QObject.
La classe hérite aussi de la classe Abstract et donc une deuxième fois de QObject.
Je ne peux pas modifier QMainwindow afin de faire de l'héritage virtuel de QObject.
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
class MainWindow : public QMainWindow, public Abstract
{
    Q_OBJECT
 
    public :
        MainWindow (QObject*parent = 0);
        ~MainWindow ();
 
    void mustBeImplemented(void) { emit aRandomSignal(); // here I am implemented }
 
    private :
        Ui_MainWindow* ui;
 
};

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
class controller : public QObject
{
    Q_OBJECT
 
    public :
        controller (QObject*parent = 0);
        ~controller ();
 
    void setAbstract(Abstract *abstract)
    {
        // if abstract not null deconnect from it
        // connect to the new one
        connect(abstract, SIGNAL(aRandomSignal()), this, SLOT(aRandomSlot()));
    }
    public slots :
        void aRandomSlot(void) { // do something }
 
    private :
        Abstract *abstract;
 
};

Voilà, quelle est la solution à ce problème ?
J'ai pensé à faire de la classe MainWindow un wrapper de QMainwindow et de modifier en conséquence ce qui va bien pour la classe Ui_MainWindow, entre autre :

Avant
Code :
1
2
3
4
5
6
7
MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow)
{
    ui->setupUi(this);
 
    initializeWidgets();
    createConnections();
}
Après (avoir mis un membre QMainwindow *win)

Code :
1
2
3
4
5
6
7
MainWindow::MainWindow(QWidget *parent) : win(new QMainwindow(parent)), ui(new Ui::MainWindow)
{ 
    ui->setupUi(win);
 
    initializeWidgets();
    createConnections();
}
__________________
Lorsque vous avez trouvé solution à votre problème, n'oubliez pas de cliquer en bas de la page
Besoin d'un photographe de mariage : http://www.triangle-photo.fr
MacPro est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/01/2012, 16h52   #2
Membre éprouvé
 
Avatar de MacPro
 
Inscription : novembre 2007
Messages : 354
Détails du profil
Informations personnelles :
Âge : 28
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : novembre 2007
Messages : 354
Points : 409
Points : 409
J'ai finalement mis en place ma solution et ça marche très bien.
Merci quand même à la centaine de lectures (ou de clics ).
__________________
Lorsque vous avez trouvé solution à votre problème, n'oubliez pas de cliquer en bas de la page
Besoin d'un photographe de mariage : http://www.triangle-photo.fr
MacPro est déconnecté   Envoyer un message privé Réponse avec citation 10
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 04h18.


 
 
 
 
Partenaires

Hébergement Web