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