2017-10-18 20 views
0

J'ajoute des checkBoxes récursivement dans des cellules tableWidget (toujours dans la colonne 1) sur une fonction spécifique. Le nombre final de ces cases à cocher n'est pas défini et dépend de l'entrée de l'utilisateur. Je voudrais connecter chacun d'entre eux avec une connexion de slot de signal qui me dit lequel a été vérifié.qt signal-slot sur QCheckBox (s) précédemment ajouté récursivement

Quelqu'un peut-il m'aider? Je ne comprends pas vraiment comment faire ...

grâce Giuseppe

+1

Ajoutez simplement dans votre boucle for: 'connecter (checkBox, & QCheckBox :: stateChanged, [=] (état int) {qDebug() << "checkbox cliqué" << état;});' – user3606329

+0

merci, mais comme vous avez dit je ne peux pas dire lequel a été vérifié: je reçois toujours 2 ou 0 quelle que soit la case à cocher – piepolitb

+0

Je ferais mieux de m'expliquer: je voudrais émettre un signal qui me donne la valeur de i (le numéro de ligne où la case à cocher est cliquée) – piepolitb

Répondre

0

Il y a quatre solutions pour ce problème. Je vais seulement décrire la possibilité la plus propre.

La meilleure solution est réellement de rendre votre article vérifiable. Vous pouvez le faire en définissant le drapeau Qt::ItemIsUserCheckable sur l'article en utilisant setFlags(), n'oubliez pas de conserver également les valeurs par défaut.

QStringList matID; 
for(int i=0; i<matID.size(); i++ 
{ 
    ui->tableWidget->insertRow(ui->tableWidget->rowCount()); 

    QTableWidgetItem *item = ui->tableWidget->getItem(ui->tableWidget->rowCount()-1,0); 
    item->setFlags(item->getFlags() | Qt::ItemIsUserCheckable); 
} 

Puis, comme expliqué dans Qt/C++: Signal for when a QListWidgetItem is checked? (ItemWidgets sont assez similaires), vous pouvez écouter sur itemChanged et vérifier à l'aide checkState().

Les autres méthodes seraient:

  • fixé un délégué pour votre colonne

  • créer un QSignalMapper pour cartographier vos propres QCheckBox pointeurs à une valeur identifiant vos lignes

  • Utilisez le QObject::sender() la fonction membre pour déterminer quelle case était responsable et la renvoyer à la ligne par vous-même.