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

Qt Discussion :

Insérer dynamiquement un QTableWidgetItem dans un QTableWidget


Sujet :

Qt

  1. #1
    Membre habitué

    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2013
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2013
    Messages : 57
    Points : 193
    Points
    193
    Billets dans le blog
    3
    Par défaut Insérer dynamiquement un QTableWidgetItem dans un QTableWidget
    Bonsoir, depuis désespérément quelques jours, je recherche comment je pourrais insérer un QTableWidgetItem dans un QTableWidget.
    J'ai une fenêtre principale depuis laquelle je fais une partie des opérations de l'application et dans le constructeur j'initialise la QTableWidget.

    Je commentce par l'initialiser dans le header
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    class Fenprincipale : public QMainWindow {
        //...
        private:
            //...
         QTableWidget*tableWidget;
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    FenPrincipale::FenPrincipale() {
        //...
    
       QTableWidget*tableWidget=newQTableWidget(this);tableWidget->setColumnCount(1);    //...
    }
    J'ai testé plusieurs solutions qui se sont toutes terminées par SIGFAULT (docn erreur au niveau de l'accès à la mémoire) en voulant soit:
    - dans une fonction quand je veux ajouter un truc, insérer dans une QList<QTableWidgetItem>li;
    - lors de setItem ([1])


    bref, pour être clair: j'ai essayé de m'inspirer de la liste des tâches restantes de UltraCopeir (fait avec Qt) pour afficher à l'utilisateur la liste des actions restantes à effectuer (en fait le QTableWidgetItem prend un QString en label)
    [1] : this->tableWidget->setItem(tableWidget->rowCount(),1,&li.last());

    Merci, j'espère avoir été assez précis sans m'éparpiller partout

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

    Erreur classique Membres de classe vs variables locales, supprime QTableWidget* de la ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    QTableWidget*tableWidget=newQTableWidget(this);tableWidget->setColumnCount(1);    //...

  3. #3
    Membre habitué

    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2013
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2013
    Messages : 57
    Points : 193
    Points
    193
    Billets dans le blog
    3
    Par défaut
    C'est donc à cause du tuto d'OC
    Merci je vais regarder.
    En me^me temps: dans une autre fonction de la même classe, je cherche comment je pourrais initialiser un QTableWidget puis de le mettre dans un QList (pourquoi pas) et en fait c'est lié au problème que je rencontre: comment bien initialiser cette variable pour la mettre dans la QLIst . Merci
    Edit: Je viens de voir sur la FAQ que une partie de la réponse concernant les variables locales vient d'être résolu.
    Edit 2: Finalement, après une lecture de cette faq, la source du problème me semble résoluble tout seul.

  4. #4
    Membre habitué

    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2013
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2013
    Messages : 57
    Points : 193
    Points
    193
    Billets dans le blog
    3
    Par défaut
    Re-bonsoir,
    après une édition du code, j'ai créer un ...

    Le problème est celui dis précédemment:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    
    listeItems->append(*newQTableWidgetItem(path));
    autosz=tableWidget->rowCount();sz++;
    tableWidget->setItem(sz,1,listeItems->value(sizeof(listeItems)));
    //                          --> No viable conversion from QTableWidgetItem to QTableWidgetItem*
    Avec QT Creator, le "&" et le "*" mettent également une erreur...C'est lors de l'utilisation du pointeur que cela coince (comme énoncé au dernier post)

    Edit: code dans le header: /*Ajout de */QVector<QTableWidgetItem>*listeItems;

  5. #5
    Invité
    Invité(e)
    Par défaut
    Pour commencer, utilise un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    QVector<QTableWidgetItem *>listeItems;
    soit : un tableau de pointeurs sur QTableWidgetItem. Car si tu stockes des QTableWidgetItem et les ajoutes via leur adresse dans ton tableWidget, tu vas te retrouver avec un problème de double destruction (depuis la QList ET la QTableWidget).

    Vient alors :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    auto item = new QTableWidgetItem(path);
    listeItems.append(item);
    auto sz = tableWidget->rowCount();
    // sz++; Avec cette incrémentation, tu l'ajoutes deux lignes plus bas (rappel : les indices commencent à 0)
    tableWidget->insertRow(sz);
    tableWidget->setItem(sz,1, item));
    Pour le nombre d'éléments de ton QVector, c'est listeItems.size() et non pas sizeof(listeItems), taille de la variable en mémoire indépendante de son nombre d'éléments.
    Dernière modification par Invité ; 29/03/2019 à 20h39.

  6. #6
    Membre habitué

    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2013
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2013
    Messages : 57
    Points : 193
    Points
    193
    Billets dans le blog
    3
    Par défaut
    Merci énormément, en ne suivant que le tutos d'OC, il est dis sur internet que l'on n'est pas si bon que ça. (surtout avec les dernières normes comme c++14 ou c++17 voir 20)

  7. #7
    Membre habitué

    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2013
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2013
    Messages : 57
    Points : 193
    Points
    193
    Billets dans le blog
    3
    Par défaut
    Bonsoir, tout fonctionne sauf la màj du widget:
    un appel à insertRow(sz) insère bien une cellule (mais vide )

    code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    auto item = new QTableWidgetItem(path); //path est un QString
    listeItems.append(item);
    auto sz = tableWidget->rowCount();
    tableWidget->insertRow(sz);
    tableWidget->setItem(sz, 1, item);
    tableWidget->update();
    le débogage ne donne malheureusement rien (j'ai essayé sans et avec insertRow)
    Quelqu'un aurait une solution ?

  8. #8
    Invité
    Invité(e)
    Par défaut
    Avec tableWidget->insertRow(sz); effectivement.
    As-tu également fixé quelque part le nombre de colonnes ? Que ce soit à la construction ou plus tard avec tableWidget->setColumnCount(...); ?

  9. #9
    Membre habitué

    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2013
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2013
    Messages : 57
    Points : 193
    Points
    193
    Billets dans le blog
    3
    Par défaut
    Bonsoir, oui j'ai effectivement fixé le nombre de colonnes ... et j'ai mis le path dans un qDebug() et il est correct

  10. #10
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par tutosfaciles48 Voir le message
    Bonsoir, oui j'ai effectivement fixé le nombre de colonnes ...
    à combien ?
    Étant donné l'indice 1 de tableWidget->setItem(sz, 1, item);, il doit être au minimum de 2.

    Et si le path est correct et non vide, je ne vois pas d'autre raison

  11. #11
    Membre habitué

    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2013
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2013
    Messages : 57
    Points : 193
    Points
    193
    Billets dans le blog
    3
    Par défaut
    Bonsoir, le truc est que j'avais un doute (car c'est indiqué nulle part dans la doc) que les indices commencent à 0 ... Merci cela marche correctement maintenant. J'espère que cette discussion vas permettre d'aider beaucoup de personne dans mon cas.

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

Discussions similaires

  1. Insérer dynamiquement des JPanels dans un JPanel
    Par Aralek dans le forum Débuter
    Réponses: 2
    Dernier message: 25/05/2018, 21h56
  2. Insérer dynamiquement une Image dans un rapport Crystal Report
    Par arnaudjol dans le forum SAP Crystal Reports
    Réponses: 9
    Dernier message: 06/01/2017, 13h09
  3. Réponses: 3
    Dernier message: 31/08/2012, 11h48
  4. [A-02] Insérer un champ calculé dans un tableau croisé dynamique
    Par atoffoli75 dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 23/11/2008, 09h55
  5. Réponses: 0
    Dernier message: 19/07/2008, 12h21

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