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 :

QTableWidget récalcitrant qui provoque un plantage

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2008
    Messages : 4
    Par défaut QTableWidget récalcitrant qui provoque un plantage
    Bonjour,

    J'ai quelques soucis à faire fonctionner un tableWidget correctement.

    En effet quand je veux récuperer ou modifier la valeur d'un élément tableWidgetItem, j'obtiens un plantage.

    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
    #include "mainwindow.h"
    #include "ui_mainwindow.h"
     
    MainWindow::MainWindow(QWidget *parent) :
        QMainWindow(parent),
        ui(new Ui::MainWindow)
    {
        ui->setupUi(this);
    }
     
    MainWindow::~MainWindow()
    {
        delete ui;
    }
     
    void MainWindow::changeEvent(QEvent *e)
    {
        QMainWindow::changeEvent(e);
        switch (e->type()) {
        case QEvent::LanguageChange:
            ui->retranslateUi(this);
            break;
        default:
            break;
        }
    }
     
    void MainWindow::on_pushButton_clicked()
    {
     
       ui->tableWidget->setCurrentCell(0,0);
       ui->tableWidget->currentItem()->setText("fff");
    }


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    #include <QtGui/QApplication>
    #include "mainwindow.h"
     
    #include <iostream>
    #include <iomanip>
     
    int main(int argc, char *argv[])
    {
        QApplication a(argc, argv);
        MainWindow w;
        w.show();
        return a.exec();
    }
    Quelqu'un sait-il me dire quel est le problème?

    Merci bien.

  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
    Le problème c'est que tu ne vérifies pas si les pointeurs que tu utilises sont nuls ou non. Si ça plante c'est que currentItem() renvoie nul.

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2008
    Messages : 4
    Par défaut
    C'est possible, j'ai un peu du mal à comprendre comment utiliser les tableWidget correctement.

    Mon but est de récuperer toutes les valeurs encodées par l'utilisateur dans un tableau d'une seule colonne mais je n'arrive pas à accéder correctement aux valeurs de ce tableau. Le tableWidget me semble être le bon outil pour y parvenir mais je bloc dessus, à mon avis pour une bêtise.

    Je ne saisi également pas bien la différence entre Cell et item.

    Tu sais éventuellement m'éclairer?

    J'ai remarqué que si je double-clique dans la cellule avant de cliquer sur le bouton, ça ne plante plus. Il faut peut-être initialiser préalablement le tableWidgetItem?

    Merci bien.

  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
    Comme je l'ai dit, la bêtise c'est juste de ne pas tester tes pointeurs avant de les utiliser, c'est du C/C++. S'il n'y a pas d'item courant, alors currentItem() renvoie NULL. Du plantage, on déduit que le tableau nouvellement créé ne contient aucun item, et que le fait de double cliquer dans une cellule (cell) doit y en créer un qui devient le courant.
    Une cellule peut contenir soit des items (QTableWidgetItem), soit des widgets (cellWidget), je pense que c'est ça la différence. currentItem() te renvoie l'item de la cell courante, s'il existe, NULL sinon.

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2008
    Messages : 4
    Par défaut
    ok la piece est tombée, je viens de changer mon code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    void MainWindow::on_pushButton_clicked()
    {
        if (ui->tableWidget->item(0,0) != 0)
            ui->tableWidget->item(0,0)->setText("fff");
    }
    et ça ne plante plus. C'est suffisent pour moi dans la mesure où mon bute est de récuperer la valeur de la cellule et non de la modifier.

    Merci pour tes éclaircicements.

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

Discussions similaires

  1. Détecter la transaction qui provoque ORA-14450
    Par ilalaina dans le forum Administration
    Réponses: 5
    Dernier message: 16/01/2009, 08h36
  2. Les composant qui provoquent la navigation?
    Par JauB dans le forum JSF
    Réponses: 9
    Dernier message: 12/11/2008, 10h24
  3. Réponses: 2
    Dernier message: 18/03/2008, 13h58
  4. delete provoque un plantage
    Par oodini dans le forum C++
    Réponses: 12
    Dernier message: 24/08/2007, 14h35
  5. une requête SELECT INTO provoque un plantage sous Access
    Par Invité dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 29/12/2005, 11h35

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