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 :

Du QTableWidgetItem à une case d'un tableau

  1. #1
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2011
    Messages
    86
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2011
    Messages : 86
    Par défaut Du QTableWidgetItem à une case d'un tableau
    Bonsoir,
    Voici ce que j'esseye de faire mais en vain:
    l'utilisateur entre des données dans un QTableWidget , ces données constituant Voici le code:
    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
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
     
    //the header
    #ifndef FENPRINCIPALE_H
    #define FENPRINCIPALE_H
    #include <QtGui>
    #include <vector>
    class FenPrincipale : public QWidget
    {
        Q_OBJECT
    public:
    FenPrincipale();
    bool  M[2][2];
    QTableWidgetItem * element;
    private slots:
    private:
         QTableWidget* tableWidget;
     
     
    };
    #endif
     
     
     
    //FenPrincipale.cpp
     
     
     
    #include "qDebug.h"
    #include "FenPrincipale.h"
     
     
    FenPrincipale::FenPrincipale()
    {
        int o,p;
     
        tableWidget = new QTableWidget(2,2,this);
        element = new QTableWidgetItem (1000);
        for (o=0; o<2; o++)
        {
          for (p=0; p<2; p++)
          {
           (M[o][p])=false;
     
          }
        }
     
        for (o=0; o<2; o++)
        {
          for (p=0; p<2; p++)
           {
            element=(tableWidget->itemAt((o+1),(p+1)));
            if ((element->toString)="1")
            {
                M[o][p]=true;
            }
            else
            {
                M[o][p]=false;
            }
           }
        }
     
    }
     
     
    //main.cpp
     
     
    #include <QApplication>
    #include "FenPrincipale.h"
    int main(int argc, char* argv[])
    {
    QApplication app(argc, argv);
     
    FenPrincipale fenetre;
    fenetre.show();
    return app.exec();
    }
    Merci d'avance pour l'attention apportée à ce message.

  2. #2
    Responsable Qt & Livres


    Avatar de dourouc05
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2008
    Messages
    26 772
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Août 2008
    Messages : 26 772
    Par défaut


    Quel est le problème ? Il me semble que tu t'es arrêté en plein milieu d'une phrase (à moins que ce ne soit une figure de style) .
    Vous souhaitez participer aux rubriques Qt (tutoriels, FAQ, traductions) ou HPC ? Contactez-moi par MP.

    Créer des applications graphiques en Python avec PyQt5
    Créer des applications avec Qt 5.

    Pas de question d'ordre technique par MP !

  3. #3
    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
    Bonsoir,

    Ligne 52 c'est un peu la cata, je te laisse corriger...

    Dans un bon IDE (Qt Creator par exemple), en tapant juste 't' (ou en lisant la doc, c'est pareil) t'aurais vu qu'il n'y a pas de méthode "toString()" mais qu'il y a text().

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    element = new QTableWidgetItem (1000);
    Fuite mémoire, tu crées quelque chose d'inutile et tu ne le supprimes pas. element est un pointeur que tu utilises bien par la suite (pointer les items du tableau).

  4. #4
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2011
    Messages
    86
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2011
    Messages : 86
    Par défaut
    Merci pour votre réponse .
    Bonsoir,
    Merci pour ta réponse Troudhyl.
    Je m'excuse pour l'erreur.
    Voici ce que j'esseye de faire:
    l'utilisateur entre des données dans un QTableWidget , ces données constituant des pointeurs vers des QTableWidgetItem seront ensuite convertis en QString et traités pour le remplissage d'un tableau M de booléens.
    Voici le code:
    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
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
     
     
    //FenPrincipale.cpp
     
     
    #include "qDebug.h"
    #include "FenPrincipale.h"
     
     
    FenPrincipale::FenPrincipale()
    {
        int o,p;
     
        tableWidget = new QTableWidget(2,2,this);
        element = new QTableWidgetItem (1000);
        for (o=0; o<2; o++)
        {
          for (p=0; p<2; p++)
          {
           (M[o][p])=false;
     
          }
        }
     
        for (o=0; o<2; o++)
        {
          for (p=0; p<2; p++)
           {
            element=(tableWidget->item((o+1),(p+1)));
            if ((element->text())=="1")
            {
                M[o][p]=true;
            }
            else
            {
                M[o][p]=false;
            }
           }
        }
     
    }
    Merci infiniment pour votre aide .

  5. #5
    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
    Oui, et donc quel est le problème ?

    Je répète, la ligne 15 doit être effacée.

    Lignes 27 à 29 : pour la fonction item(), comme tout, on commence à compter de 0, donc il ne faut pas les +1 (element = tableWidget->item(o,p);).

  6. #6
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2011
    Messages
    86
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2011
    Messages : 86
    Par défaut
    J 'ai effectué les changements que vous m'avez conseillé.
    Le programme plante, ça c'est le premier probléme.
    Je ne parviens pas à mettre les données que j'ai saisi par le clavier dans les case de la QTableWidget pour remplir le tableau M .
    Voici le code modifié:
    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
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
     
     
     
    //FenPrincipale.cpp
     
     
    #include "qDebug.h"
    #include "FenPrincipale.h"
     
     
    FenPrincipale::FenPrincipale()
    {
        int o,p;
     
        tableWidget = new QTableWidget(2,2,this);
     
        for (o=0; o<2; o++)
        {
          for (p=0; p<2; p++)
          {
           (M[o][p])=false;
     
          }
        }
     
        for (o=0; o<2; o++)
        {
          for (p=0; p<2; p++)
           {
            element=(tableWidget->item(o,p));
            if ((element->text())=="1")
            {
                M[o][p]=true;
            }
            else
            {
                M[o][p]=false;
            }
           }
        }
     
    }
    Merci pour votre aide.
    PS: je n'ai pas mis le header et le main car il sont inchangé à moins qu'il y ait un probléme au niveau du HEADER.

  7. #7
    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
    Par contre j'ai l'impression que tu n'essayes pas trop d'avancer de ton côté. Donc pour t'aider :

    - As-tu essayé d'afficher le tableau ? Y'a rien dans ton code pour le faire, tu crées l'objet mais il ne fait pas partie de l'interface.
    - Comment envisages-tu le comportement de l'application ? Car tel que tu l'as écrit, même sans regarder techniquement, ça va pas. Tu construis ta fenêtre principale avec donc un tableau, M que tu initialises (pourquoi pas mais est-ce utile si finalement c'est tout écrasé après), et juste après tu essayes de lire ce qu'il y a dans le tableau, toujours dans le constructeur, alors que rien n'est encore affiché, forcément.

    Donc déjà si tu pouvais regarder ces points, le premier c'est le B-A BA de Qt donc facile (créer un layout et mettre la table dedans, par exemple, 2 lignes de code, regarde un tutoriel s'il faut), le 2e c'est de la conception. Quand ce sera fait, y'a de fortes chances pour que le code marche (je l'ai fait chez moi, et c'est ok avec peu d'ajustements).

  8. #8
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2011
    Messages
    86
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2011
    Messages : 86
    Par défaut
    merci Troudhyl, d'avoir pris du temps pour me donner ces conseils,
    J'ai esseyé de mon côté , je vous assure.
    Le QTableWidget s'affiche , je peux le remplir .
    Une fois le remplissage effectué , je le valide en appuyant sur un bouton .
    Ce dernier est supposé valder le remplissage de la matrice 2D nommée M.
    C'est à ce niveau que ça ne marche pas .
    Voici le code tel qu'il aprés modification:
    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
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
     
    //le header modifié
     #ifndef FENPRINCIPALE_H
     #define FENPRINCIPALE_H
     #include <QtGui>
     #include <vector>
     class FenPrincipale : public QWidget
     {
     Q_OBJECT
     public:
     FenPrincipale();
     bool M[2][2];
     
     private slots:
     void FillIn();
     private:
     QTableWidget *tabM;
     QTableWidgetItem *it;
     QPushButton * generer;
     };
     #endif
     
     
     
     //FenPrincipale.cpp
     
     
     
     //FenPrincipale.cpp
     #include "qDebug.h"
     #include "FenPrincipale.h"
     FenPrincipale::FenPrincipale()
     {
     
     QTableWidget *tabM =new QTableWidget(this);
     tabM->setRowCount(2);
     tabM->setColumnCount(2);
     generer = new QPushButton("&Générer !",this);
     generer->move(50,50);
     QTableWidgetItem *it = new QTableWidgetItem;
     
     
     for (int r = 0; r < 2; ++r) {
     for (int c = 0; c < 2; ++c) {
     
     
     tabM->setItem(r, c, it);
     it->setData(Qt::EditRole, 0);
     //qDebug() <<it;
     }
     }
     
     connect(generer, SIGNAL(clicked()), this, SLOT(FillIn()));
     }
     void FenPrincipale::FillIn()
     {
     for (int r = 0; r < 2; ++r) {
     for (int c = 0; c < 2; ++c) {
     
     Q_ASSERT(it);
     int val = it->data(Qt::EditRole).toInt();
     M[r][c] = (val == 1)? true: false;
     }
     }
     }
     
     
     //main.cpp "non modifié"
     
     
     #include <QApplication>
     #include "FenPrincipale.h"
     int main(int argc, char* argv[])
     {
     QApplication app(argc, argv);
     
     FenPrincipale fenetre;
     fenetre.show();
     return app.exec();
     }
    Merci de m'orienté davantage aprés ces modifications.

  9. #9
    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
    Ok déjà c'est plus clair, un bouton pour valider

    Par contre tu as compliqué le code, ce que tu avais fait avant était bon, y'avait juste effectivement à rajouter le bouton et le slot, et à déplacer la dernière grosse boucle for dans ce slot.

  10. #10
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2011
    Messages
    86
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2011
    Messages : 86
    Par défaut
    Merci,
    En dépit des changements cela ne fonctionne pas.
    Après saisie des valeurs dans le QTablewidget et l'appui sur le boutton , le programme plante :
    les erreurs sont :
    - a quitté avec le code -1073741819
    - QTableWidget: cannot insert an item that is already owned by another QTableWidget.


    Et quand j'utilise le debugger j'ai l'erreur suivante:
    -l'inferieur a stoppé car il a reçu un signal du systéme d'exploitation
    -nom du signal: sigsegv
    -signification du signal :segmentation fault
    Je n'y comprend pas grand chose , pouvez-vous me donner une indication pour régler le probléme.
    Merci d'avance.

  11. #11
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2011
    Messages
    86
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2011
    Messages : 86
    Par défaut
    Bonsoir,
    J'ai avancé de mon côté .
    J 'ai pu recolter les cellules dans l'entier "val" mais val egal à 0 même si je saisi autre chose que 0 dans la cellule du QTableWidget.
    Voici le code:
    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
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
     
    //le header
    #ifndef FENPRINCIPALE_H
    #define FENPRINCIPALE_H
    #include <QtGui>
    #include <vector>
    class FenPrincipale : public QWidget
    {
        Q_OBJECT
    public:
        FenPrincipale();
        bool  M[2][2];
     
    private slots:
        void FillIn();
    private:
        QTableWidget  *tabM;
        //QTableWidgetItem *it;
        QPushButton * generer;
    };
    #endif
     
     
     
     
     
    //FenPrincipale.cpp
    #include "qDebug.h"
    #include "FenPrincipale.h"
    FenPrincipale::FenPrincipale()
    {
     
        QTableWidget *tabM =new QTableWidget(this);
        tabM->setRowCount(2);
        tabM->setColumnCount(2);
        generer = new QPushButton("&Générer !",this);
        generer->move(50,50);
     
        for (int r = 0; r < 2; r++) {
            for (int c = 0; c < 2; c++) {
     
                QTableWidgetItem *it = new QTableWidgetItem;
                tabM->setItem(r, c, it);
                it->setData(Qt::EditRole, 0);
                //qDebug() <<it;
            }
        }
     
        connect(generer, SIGNAL(clicked()), this, SLOT(FillIn()));
    }
    void FenPrincipale::FillIn()
    {
        for (int r = 0; r < 2; r++) {
            for (int c = 0; c < 2; c++) {
                QTableWidgetItem *it = new QTableWidgetItem;
                Q_ASSERT(it);
                int val = it->data(Qt::EditRole).toInt();
                M[r][c] = (val == 1)? true: false;
     
                qDebug() <<val;
            }
        }
    }
     
    //main
     
     
    #include <QApplication>
    #include "FenPrincipale.h"
    int main(int argc, char* argv[])
    {
    QApplication app(argc, argv);
     
    FenPrincipale fenetre;
    fenetre.show();
    return app.exec();
    }
    Est-ce que vous pouvez me donner une indication sur la maniére dont je pourrais régler le probléme .
    Merci d'avance pour le temps et l'attention apportés à ce message.

  12. #12
    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à tabM est redéfini dans le constructeur, erreur d'inattention j'imagine mais faudrait corriger. Utiliser la version courte (constructeur qui prend le nombre de lignes et de colonnes) marchait très bien.
    Pour l'affichage, je sais bien que ce n'est qu'un test mais ce n'est pas beaucoup plus long d'écrire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    setLayout(new QVBoxLayout);
    layout()->addWidget(tabM);
    layout()->addWidget(generer);
    Il ne reste plus qu'à écrire correctement la ligne 55 (avec tabM->item(), n'est-ce pas ) et tout devrait fonctionner.

  13. #13
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2011
    Messages
    86
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2011
    Messages : 86
    Par défaut
    Bonjour,
    Le programme fonctionne puisque M[r][c] est mis à jour selon la valeur inserée .
    Cependant il y a une phrase qui résulte du debugger:
    - QTableWidget: cannot insert an item that is already owned by another QTableWidget
    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
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
     
     
    //le header
    #ifndef FENPRINCIPALE_H
    #define FENPRINCIPALE_H
    #include <QtGui>
    #include <vector>
    class FenPrincipale : public QWidget
    {
        Q_OBJECT
    public:
        FenPrincipale();
        bool  M[2][2];
     
    private slots:
        void FillIn();
    private:
        QTableWidget  *tabM;
        //QTableWidgetItem *it;
        QPushButton * generer;
        QVBoxLayout * vbox;
    };
    #endif
     
    //FenPrincipale.cpp
    #include "qDebug.h"
    #include "FenPrincipale.h"
    FenPrincipale::FenPrincipale()
    {
     
       // QTableWidget *tabM =new QTableWidget(this);
        tabM =new QTableWidget(this);
        tabM->setRowCount(2);
        tabM->setColumnCount(2);
        generer = new QPushButton("&Générer !",this);
       // generer->move(50,50);
        QVBoxLayout* vbox = new QVBoxLayout();
        vbox->addWidget(generer);
           vbox->addWidget(tabM);
           this->setLayout(vbox);
     
    for (int r = 0; r < 2; r++) {
            for (int c = 0; c < 2; c++) {
     
                QTableWidgetItem *it = new QTableWidgetItem;
                tabM->setItem(r, c, it);
                it->setData(Qt::EditRole, 0);
                //qDebug() <<it;
            }
        }
     
        connect(generer, SIGNAL(clicked()), this, SLOT(FillIn()));
    }
    void FenPrincipale::FillIn()
    {
        for (int r = 0; r < 2; r++) {
            for (int c = 0; c < 2; c++) {
                QTableWidgetItem *it =new QTableWidgetItem;
     
         it = tabM->item(r,c);
     
                Q_ASSERT(it);
     
                it=(tabM->item(r,c));
                tabM->setItem(r, c, it);
                qDebug() <<it;
                int val = (it->data(Qt::EditRole)).toInt();
                M[r][c] = (val == 1)? true: false;
     
                qDebug() <<M[r][c];
            }
        }
    }
     
     
     
    //main.cpp
     
     
    #include <QApplication>
    #include "FenPrincipale.h"
    int main(int argc, char* argv[])
    {
    QApplication app(argc, argv);
     
    FenPrincipale fenetre;
    fenetre.show();
    return app.exec();
    }
    Merci de m'orienter vers une maniére de régler le probléme , même si le résultat y est , mais de peur que ceci ne se repercute ulterieurement , j'aimerais bien le régler.
    Merci encore.

  14. #14
    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
    Le problème c'est que tu as écris des lignes de code inutiles et que tu as compliqué l'ensemble. Ton code étant court, tu peux essayer de voir ligne par ligne si elles sont utiles ? Les lignes inutiles peuvent effectivement engendrer toutes sortes de souci, à commencer par des fuites mémoire.

    Si jamais tu ne vois pas, je te laisse comparer avec ce code nettoyé... :
    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
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    //le header
    #ifndef FENPRINCIPALE_H
    #define FENPRINCIPALE_H
     
    #include <QtGui>
     
    class FenPrincipale : public QWidget
    {
        Q_OBJECT
     
    public:
        FenPrincipale();
        bool  M[2][2];
     
    private slots:
        void FillIn();
     
    private:
        QTableWidget *tabM;
        QPushButton *generer;
    };
     
    #endif
     
     
    //FenPrincipale.cpp
    #include <QDebug>
    #include "FenPrincipale.h"
     
    FenPrincipale::FenPrincipale()
    {
        tabM =new QTableWidget(2, 2, this);
        generer = new QPushButton("&Générer !",this);
        QVBoxLayout *vbox = new QVBoxLayout;
        vbox->addWidget(generer);
        vbox->addWidget(tabM);
        setLayout(vbox);
     
        for (int r = 0; r < tabM->rowCount(); r++) {
            for (int c = 0; c < tabM->columnCount(); c++) {
                QTableWidgetItem *it = new QTableWidgetItem;
                tabM->setItem(r, c, it);
                it->setData(Qt::EditRole, 0);
            }
        }
     
        connect(generer, SIGNAL(clicked()), this, SLOT(FillIn()));
    }
     
    void FenPrincipale::FillIn()
    {
        for (int r = 0; r < tabM->rowCount(); r++) {
            for (int c = 0; c < tabM->columnCount(); c++) {
                QTableWidgetItem *it = tabM->item(r,c);
                Q_ASSERT(it);
                qDebug() << it;
                int val = (it->data(Qt::EditRole)).toInt();
                M[r][c] = (val == 1) ? true : false;
                qDebug() << M[r][c];
            }
        }
    }
     
     
    //main.cpp
    #include <QApplication>
    #include "FenPrincipale.h"
     
    int main(int argc, char* argv[])
    {
        QApplication app(argc, argv);
     
        FenPrincipale fenetre;
        fenetre.show();
        return app.exec();
    }

  15. #15
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2011
    Messages
    86
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2011
    Messages : 86
    Par défaut
    Merci infiniment ,
    dourouc05 et Troudhyl pour votre aide , j'aprécie énormement le grand coup de main!!!

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

Discussions similaires

  1. Infobulle d'une case d'un tableau
    Par MayOL69bg dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 12/04/2007, 10h13
  2. Accès à une case d'un tableau grâce à headers
    Par Invité dans le forum Général JavaScript
    Réponses: 19
    Dernier message: 04/10/2006, 15h45
  3. Réponses: 9
    Dernier message: 15/05/2006, 16h23
  4. Lien dans une case d'un tableau
    Par will89 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 3
    Dernier message: 27/04/2006, 10h50
  5. [Debutant] URL utilisable depuis une case d'un tableau de BD
    Par Marc_3 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 03/04/2005, 19h06

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