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 :

D'une classe à l'autre

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2011
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2011
    Messages : 42
    Par défaut D'une classe à l'autre
    Bonjour,

    EDIT: J'utilise Qt.
    J'ai une classe Window et une classe Ftp.
    J'aimerai pouvoir modifier une image de ma class Window depuis ma class Ftp, sans créer d'objet Window dans ma classe Ftp.

    J'ai tenté, peut-être une ineptie mais bon j'ai tenté quand même :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Window::changementStatut(int)

    Mais erreur, il me dit que je ne peux pas l'utiliser sans créer d'objet.

    Bref comment faire quelque chose de ce genre en évitant le problème.

    Merci d'avance.

  2. #2
    Membre Expert

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2009
    Messages
    1 009
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2009
    Messages : 1 009
    Par défaut
    Déjà, une méthode que tu appelles sans instancier d'objet est une méthode statique (static void method(int param...); ).
    L'image que tu veux modifier doit aussi être un membre statique.

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2011
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2011
    Messages : 42
    Par défaut
    Oui c'est bien ce qui m'embête.

    Du coup, je me demandais si l'utilisation des signaux et slots n'était pas plus intéressante.

    Mon problème c'est que je n'arrive pas à connecter le signal de ma class Ftp au slot de ma class Window...

  4. #4
    Membre Expert

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2009
    Messages
    1 009
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2009
    Messages : 1 009
    Par défaut
    Pourquoi cela t'embête ? Je ne comprends pas ce que t'essayes de faire. Tu ne peux pas agir avec une classe, mais avec des objets instances de cette classe, à moins qu'il ne s'agisse de méthodes statiques.

  5. #5
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2008
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2008
    Messages : 41
    Par défaut
    A vérifier par d'autres plus expérimentés, mais j'ai une solution (moche, je tient à le préciser).

    Si tu es sûr que ta classe Window ne sera qu'en un seul exemplaire, tu peut en faire un singleton.

    Window.hpp:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    class Window {
        public:
            static Window* instance () ;
        public slots:
            void receiveImage (Image image) ;
        protected:
            Window() ; // le constructeur ne sera accessible que via la methode singleton la première fois qu'elle sera appellée
    } ;
    Window.cpp:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    Window* Window::instance() {
        static Window* _instance = 0 ;
        if (_instance == 0) {
            _instance = new Window() ;
        }
        return _instance ;
    }
     
    // slots
    void Window::receiveImage (Image image) {
        // ici, tu modifie ta Window avec l'image reçue ultérieurement
    }
    Il est alors très facile d'accéder à ta window:

    Ftp.cpp
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    void Ftp::envoiImage () {
        Image monImage () ;
     
        connect( this, SIGNAL ( sendImage (Image)),
                Window::instance(), // on obtient un pointeur sur l'instance unique de Window.
                SLOT( receiveImage(Image))
                ) ;
        emit sendImage(monImage) ;
    }
    Cependant, ça te demandera de modifier ton code déjà existant pour n'accéder à une Window que via la methode instance().

    En espérant que cela puisse t'aider.

  6. #6
    Membre éprouvé
    Avatar de ymoreau
    Homme Profil pro
    Ingénieur étude et développement
    Inscrit en
    Septembre 2005
    Messages
    1 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur étude et développement
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 154
    Par défaut
    L'utilisation du singleton est pratique dans certains cas mais à éviter si ça n'est pas vraiment utile. Je pense que dans ton cas où tu veux seulement connecter un signal, c'est sortir la grosse artillerie pour pas grand chose.

    Tu as probablement un code qui lance tout ça, dans ton main, ou de préférence une classe qui gère ta connexion etc. Ce code là crée à la fois ta mainwindow et le reste de ton application, il connait donc à la fois l'objet mainwindow et l'objet ftp, tu n'as qu'à passer en paramètre de l'un le pointeur de l'autre, et faire ton connect avec.

Discussions similaires

  1. [Débutant] transfert d'objet d'une class à l'autre
    Par patrickvier dans le forum VB.NET
    Réponses: 6
    Dernier message: 10/10/2012, 23h30
  2. Récupération d'objet d'une class à l'autre
    Par mamatt dans le forum Général Java
    Réponses: 7
    Dernier message: 04/01/2008, 15h12
  3. [D7]Méthode non accessible d'une classe à l'autre
    Par ero-sennin dans le forum Delphi
    Réponses: 2
    Dernier message: 20/03/2007, 17h44
  4. Réponses: 2
    Dernier message: 30/12/2006, 13h34
  5. Passer une variable d'une classe à l'autre
    Par Gibou dans le forum C++
    Réponses: 2
    Dernier message: 16/06/2006, 08h38

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