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

Héritage multiple de QObject


Sujet :

Qt

  1. #1
    Membre averti Avatar de MacPro
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    367
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Novembre 2007
    Messages : 367
    Points : 344
    Points
    344
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : 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
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    MainWindow::MainWindow(QWidget *parent) : win(new QMainwindow(parent)), ui(new Ui::MainWindow)
    { 
        ui->setupUi(win);
     
        initializeWidgets();
        createConnections();
    }

  2. #2
    Membre averti Avatar de MacPro
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    367
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Novembre 2007
    Messages : 367
    Points : 344
    Points
    344
    Par défaut
    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 ).

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

Discussions similaires

  1. Héritage multiple entre QObject et QGraphicsScene
    Par stalker8 dans le forum Débuter
    Réponses: 3
    Dernier message: 11/06/2012, 22h35
  2. Héritage multiple et QObject
    Par thetopic dans le forum PyQt
    Réponses: 4
    Dernier message: 23/03/2009, 19h14
  3. L'héritage multiple est-il possible en Delphi ?
    Par SchpatziBreizh dans le forum Langage
    Réponses: 8
    Dernier message: 30/06/2005, 11h30
  4. utilisez vous l'héritage multiple ?
    Par vodosiossbaas dans le forum C++
    Réponses: 8
    Dernier message: 13/06/2005, 20h25
  5. [XML Schemas]héritage multiple
    Par nicolas_jf dans le forum XML/XSL et SOAP
    Réponses: 2
    Dernier message: 10/06/2003, 12h55

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