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 :

Mise à jour des données d'un QTreeWidgetItem avec setData()

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Invité
    Invité(e)
    Par défaut Mise à jour des données d'un QTreeWidgetItem avec setData()
    Bonsoir,

    Je dois créer un gestionnaire de tâches. Donc j'ai une classe Tâche qui contient différentes informations dont un booléen que j'ai appelé "checked", pour savoir si la tâche est validée ou non.

    Pour afficher ces tâches, j'utilise un QTreeWidget. Chaque tâche est représentée par un QTreeWidgetItem et dans chaque "data", j'ai stocké les informations d'une tâche.

    Dès que je coche (ou décoche) la checkbox d'une tâche, je souhaite que les sous-tâches soient cochées ou non en fonction de cette tâche parente. De ce côté-là, pas de soucis. Mais je souhaite aussi que la "data" du QTreeWidgetItem soit mise à jour.

    J'espère que tout ce que je viens de dire est compréhensible.
    Voici mon 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
    void mainWindow::updateCheck(QTreeWidgetItem* parent) {
        widget.save->setEnabled(true);
     
        Qt::CheckState checkState = parent->checkState(0);
        QVariant var = parent->data(0, Qt::UserRole);
        Tache t = var.value<Tache>();
     
        if (checkState == Qt::Checked) {
            t.setChecked(true);
        }
        else {
            t.setChecked(false);
        }
        var.setValue(t);
        parent->setData(0,Qt::UserRole,var); // Problème !!
        for(int i = 0; i < parent->childCount(); ++i) {
            parent->child(i)->setCheckState(0, checkState);
            updateCheck(parent->child(i));
        }
    }
    Le problème arrive à la ligne avec un segfault :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    parent->setData(0,Qt::UserRole,var);
    Une petite idée ?


    J'ai une deuxième question.
    Pour appeler la méthode précédente, je connecte un signal à un slot comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    QObject::connect(widget.treeWidget, SIGNAL(itemChanged(QTreeWidgetItem*,int)), this, SLOT(updateCheck(QTreeWidgetItem*)));
    Mais lorsque je modifie le nom d'une tâche (avec setText()), la méthode est aussi appelée. Donc, ça change les checkbox des sous-tâches.

    Il y a-t-il un moyen de changer le texte, sans que la méthode, qui met à jour les checkbox, soit appelée ?

  2. #2
    Invité
    Invité(e)
    Par défaut
    Après pas mal de recherches sur le pourquoi du comment ça plante et la réparation de ce problème, je donne une solution, qui n'est peut-être pas jolie, mais ça fonctionne.

    En gros, le programme bouclait dès que je cliquais sur une checkbox, parce qu'il modifie à chaque fois le QTreeWidgetItem avec cette ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    parent->setData(0,Qt::UserRole,var);
    donc le signal itemChanged est à chaque fois activée.

    Pour résoudre ce problème, j'ai ajouté au début de la fonction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    widget.treeWidget->blockSignals(true);
    et à la fin :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    widget.treeWidget->blockSignals(false);

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

Discussions similaires

  1. [AC-2003] Problème de mise jour à des données avec ADO
    Par @omzo dans le forum VBA Access
    Réponses: 2
    Dernier message: 24/06/2010, 13h25
  2. Réponses: 7
    Dernier message: 14/06/2010, 10h23
  3. [JTable] mise à jour des données
    Par tripop dans le forum Composants
    Réponses: 3
    Dernier message: 04/02/2009, 18h52
  4. Mise à jour des données d'une table avec un SELECT
    Par bouddine dans le forum Langage SQL
    Réponses: 0
    Dernier message: 20/05/2008, 16h36
  5. mise à jour des données toutes les semaines...
    Par Toff !!!!! dans le forum Access
    Réponses: 20
    Dernier message: 22/12/2005, 11h38

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