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 ?