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

C++ Discussion :

Utiliser plusieurs attributs provenant de classes différentes


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2017
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2017
    Messages : 6
    Par défaut Utiliser plusieurs attributs provenant de classes différentes
    Bonjour à tous,
    Nouveau sur le forum je viens içi pour avoir un peu d'aide par rapport à un programme que je suis entrain de développer sous Qt en C++, mais mon problème est plus un problème de c++......

    Mon problème est que j'ai une image nommé monImageInitiale qui est de type QImage et qui est un attribut private d'une classe nommé Window. (cette image est une image chargé manuellement)
    J'ai une deuxième image nommé monImagePaint qui est de type QImage* et qui est un attribut private d'une classe nommé PaintImage.(cette image est une image noir au début et je dessine dessus ensuite via les événements souris).

    J'ai enfin une troisième classe nommé Algo1 ou je voudrais récupérer mes deux images dans une même méthode afin de pouvoir faire un algo avec ces deux images.
    Je récupère bien l'image monImageInitiale dans une méthode de la classe Algo1 via une instance de cette classe Algo1.
    Je récupère aussi correctement l'image monImagePaint dans une autre méthode de la classe Algo1 via une instance de cette classe Algo1.
    Mais je voudrais avoir dans une troisième méthode les deux images et c'est là que je "bug" car je n'arrive à récupérer que l'image monImageInitiale...

    Je vous mets le code de la classe Algo1 pour que cela soit plus clair :

    .h
    Code qt : 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
     
    class Algo1 : public QWidget{
     
        Q_OBJECT
        public:
        Algo1(QWidget *parent=0);
     
        void ImageInitiale(QImage imageInit);
        void ImagePaint(QImage *ImgPaint);
        void CalcAlgo1();
     
       private:
       QImage imageInitiale;
       QImage *imagePaint;
     
    };
    #endif
    .cpp
    Code qt : 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
     
    Algo1::Algo1(QWidget* parent) : QWidget(parent){
     
    //Constructeur de la classe Algo1
     
    }
     
    void Algo1::ImageInitiale(QImage imageInit){
    //Ici je récupère correctement l'image monImageInitiale de la classe Window via une instance de la classe Algo1
        imageInitiniale=imageInit;
    }
     
     
    void Algo1::ImagePaint(QImage *ImgPaint){
    //Ici je récupère correctement l'image monImagePaint de la classe PaintImage via une instance de la classe Algo1
        imagePaint=new QImage();
        imagePaint=ImgPaint;
     
    }
    void Algo1::CalcAlgo1()
    {
    //Ici je récupère que mon image imageInitiale si je fais une instance de la classe Algo1 dans la classe Window mais je n'arrive pas à mettre mes deux images dans cette méthode
    }

    Si vous avez besoin de plus d'explication n'hésitez pas merci par avance

  2. #2
    Expert éminent

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 202
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 202
    Par défaut
    A priori, un QImage n'est pas copiable.
    Tu dois utiliser soit une référence, soit un pointeur.

    Mais le mieux serait d'avoir une référence sur la window, et que celle-ci te propose une fonction d'accès à l'image (retournant une référence).

    La raison, c'est que si l'image change dans la window, pendant ton travail, tu peux te retrouver avec une référence (ou un pointeur) sur du "rien", ce qu'on appelle une "dangling reference"

    Sauf justification contraire, les références/pointeurs sur les images à manipuler devrait être obtenues par le constructeur de Algo1, ou par la fonction qui en fait quelque chose.
    Les setters sont très rarement une bonne idée.

  3. #3
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2017
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2017
    Messages : 6
    Par défaut
    @ternel merci de ta réponse,
    Par contre je ne suis pas sur d'avoir saisie la phrase:
    Mais le mieux serait d'avoir une référence sur la window, et que celle-ci te propose une fonction d'accès à l'image (retournant une référence).
    C'est à dire qu'il faut que j'ai une fonction qui attend en sortie mon image initiale dans la classe Window par exemple ?

    Edit: j'ai été voir le cours sur les références en c++ mais je n'ai pas bien compris comment faire pour l'implémenter ....

  4. #4
    Invité
    Invité(e)
    Par défaut
    Bonsoir,

    Citation Envoyé par ternel Voir le message
    A priori, un QImage n'est pas copiable.
    Si, elle l'est (ainsi que movable depuis Qt 5.2).

    Code Qt : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
        imagePaint=new QImage();
        imagePaint=ImgPaint;
    Ta première ligne est inutile et l'affectation qui suit « oublie » cette nouvelle zone mémoire allouée et tu as donc une fuite.

    L'utilisation de ce pointeur membre est-elle vraiment justifiée ? Si oui, tourne-toi vers l'utilisation de pointeurs intelligents qui t'éviteront bien des ennuis.

  5. #5
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2017
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2017
    Messages : 6
    Par défaut
    Bonjour,
    @Winjerome merci pour tes explications je me suis en fait tourner vers les setter et getter ce qui a résolu mes problèmes

    Bonne journée

  6. #6
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 502
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 502
    Par défaut
    Quand JAVA nous apprend à faire de la m****.

  7. #7
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2017
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2017
    Messages : 6
    Par défaut
    @bacelar est-ce que tu pourrais développer ton message stp? Car si tu as une meilleur solution à me proposer je suis preneur ....

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

Discussions similaires

  1. Comment utiliser les attributs d'une classe héritière ?
    Par neufrdb dans le forum Débuter avec Java
    Réponses: 6
    Dernier message: 04/04/2011, 19h20
  2. récupération attribut dans des classes différentes
    Par l'unique dans le forum Débuter
    Réponses: 4
    Dernier message: 14/10/2010, 10h06
  3. utiliser les attribut d'une classe dans une autre classe
    Par kaissaoui dans le forum Langage
    Réponses: 11
    Dernier message: 18/07/2007, 15h13
  4. Réponses: 6
    Dernier message: 01/04/2007, 20h13

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