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 :

Tableau à deux dimensions de QLabel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre très actif
    Profil pro
    Développeur informatique
    Inscrit en
    Mars 2010
    Messages
    336
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2010
    Messages : 336
    Par défaut Tableau à deux dimensions de QLabel
    Bonjours,

    Je souhaiterai créer une matrice de QLabel, seulement lors de la compilation Qt Creator me renvoi cette erreur :

    Cannot convert 'QLabel*** to QLabel**' in assignement
    dans mon fichier .h je declare comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
     QLabel** case_plateau;
    et l'instanciation est réalisée dans le constructeur du .cpp :

    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
     
    this->case_plateau = new QLabel**[8];
        for(int i=0 ; i<8;i++)
        {
            this->case_plateau[i] = new QLabel*[8];
        }
     
        for(int i=0 ; i<8 ; i++)
        {
            for(int j=0 ; j<8 ; j++)
            {
                if(i%2==0)
                {
                    this->case_blanche = new CaseBlanche(i,j,"debug/blanc.jpg","blanc");
                    this->case_plateau[i][j] = new QLabel(this->case_blanche->getCase());
                }
                else
                {
                    this->case_noir = new CaseNoir(i,j,"debug/noir.jpg","noir");
                    this->case_plateau[i][j] = new QLabel(this->case_noir->getCase());
                }
            }
        }
    Pourtant il s agit bien de créer le nombre de "ligne" et ensuite dans une boucle simple le nombre de "colonne" tout en "enlevant un pointeur".

  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
    Code C++ : Sélectionner tout - Visualiser dans une fenêtre à part
    this->case_plateau = new QLabel**[8];
    Là t'essayes de mettre un QLabel*** dans ton QLabel**.
    Code C++ : Sélectionner tout - Visualiser dans une fenêtre à part
    this->case_plateau[i] = new QLabel*[8];
    Là t'essayes de mettre un QLabel** dans un QLabel*.

    Le compilateur dit tout en fait. Quand tu crées un tableau :
    tableau est de type int* et contient l'adresse du premier élément du tableau.

    Là ton case_plateau est un tableau de QLabel**, c'est donc bien un QLabel***. Tu as juste à enlever une * à ces deux lignes je crois

  3. #3
    Inactif  


    Homme Profil pro
    Inscrit en
    Novembre 2008
    Messages
    5 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Secteur : Santé

    Informations forums :
    Inscription : Novembre 2008
    Messages : 5 288
    Par défaut
    Bonjour dharkan

    Un conseil très important : n'utilise pas de tableau dynamique et de pointeur !

    Fais une recherche sur ici ou sur forum C++, le problème des tableaux 2D a déjà été abordé plein de fois (il faudrait peut être que l'on ajoute une entrée dans la FAQ sur ce point)
    Regarde par exemple la classe DynamicArray2D de QExtend.

    De plus :
    - est inutile dans ton code
    - tu as de jolies fuites mémoire avec tes et (à priori, il faut voir le code de CaseNoir et CaseBlanche)

    Soit tu sais gérer la mémoire toi même et tu peux prendre le risque (souvent inutile) de travailler avec des tableaux dynamiques. Sois tu ne sais pas gérer la mémoire toi même (ou tu as envie de te compliquer la vie inutilement) et tu utilises ce que te propose le C++, la STL et Qt pour ne pas gérer la mémoire toi même (std::vector QVector, etc.)

  4. #4
    Membre très actif
    Profil pro
    Développeur informatique
    Inscrit en
    Mars 2010
    Messages
    336
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2010
    Messages : 336
    Par défaut
    voici le code de caseNoir :

    .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
     
    #ifndef CASENOIR_H
    #define CASENOIR_H
     
    #include "case.h"
    #include <QLabel>
    #include <QString>
    using std::string;
     
    class CaseNoir : public Case
    {
        private :
            QString couleurCase;
     
        public:
            CaseNoir(int,int,QString,QString);
            CaseNoir(const CaseNoir& );
     
            QLabel* getCase()const;
     
    };
     
    #endif // CASENOIR_H
    .cpp :

    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
     
    #include "case.h"
    #include "casenoir.h"
     
    CaseNoir::CaseNoir(int px,int py,QString chemin,QString couleur):Case(px,py,chemin)
    {
        couleurCase = couleur;
    }
    CaseNoir::CaseNoir(const CaseNoir& cn):Case(cn)
    {
        couleurCase = cn.couleurCase;
    }
     
    QLabel* CaseNoir::getCase()const
    {
        return Case::getCase();
    }
    le code de caseBlanche étant le meme

  5. #5
    Inactif  


    Homme Profil pro
    Inscrit en
    Novembre 2008
    Messages
    5 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Secteur : Santé

    Informations forums :
    Inscription : Novembre 2008
    Messages : 5 288
    Par défaut
    Bon, ça confirme la fuite mémoire... et donne encore plus d'importance à mon conseil de ne pas utiliser de pointeurs !

  6. #6
    Membre très actif
    Profil pro
    Développeur informatique
    Inscrit en
    Mars 2010
    Messages
    336
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2010
    Messages : 336
    Par défaut
    salut gbdivers,

    pourrait-tu m expliquer ou me dire ou je peux trouver comment on peut voir s'il y a des fuites memoire ?

    Sinon je vais tenir de ton conseil sur les pointeurs

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

Discussions similaires

  1. [Tableaux] tri de tableau deux dimensions
    Par oursquetaire dans le forum Langage
    Réponses: 8
    Dernier message: 27/12/2005, 14h27
  2. Affichage d'un tableau à deux dimensions.
    Par Allan dans le forum C
    Réponses: 3
    Dernier message: 11/12/2005, 18h29
  3. Réponses: 1
    Dernier message: 18/11/2005, 11h38
  4. tri alphabétique dans un tableau deux dimensions
    Par *!!cocco!!* dans le forum Algorithmes et structures de données
    Réponses: 7
    Dernier message: 06/12/2004, 21h38
  5. Passage d'un tableau à deux dimensions
    Par karl3i dans le forum C
    Réponses: 3
    Dernier message: 20/10/2003, 14h50

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