2010-11-23 46 views
14

Dans mon formulaire, j'ai un QListWidget qui contient des QListWidgetItems vérifiables. Je cherche un moyen de capturer l'événement d'un QListWidgetItem en cours de vérification/décoché. Je ne vois pas un tel signal exister pour cela mais peut-être que je me trompe. Ce que je fais actuellement utilise le signal QListWidget :: itemClicked() et vérifie checkState du QListWidgetItem, mais ce n'est pas ce que je veux parce que cet événement se produit chaque fois que l'on clique sur l'élément, et pas seulement la case cochée . Quelqu'un peut-il donner de l'aide? Merci!Qt/C++: signal pour quand un QListWidgetItem est coché?

+1

Je pense que je peux contourner cela en utilisant le signal QListWidget :: itemChanged(), qui est déclenché quand je coche/décoche un item, mais il serait également déclenché si j'édite la valeur de l'item qui, bien que Je ne fais pas maintenant, est toujours une solution imparfaite. – Joseph

+1

Un autre problème avec 'QListWidget :: itemClicked()' est qu'il ne se déclenche pas lorsque vous utilisez le clavier, par exemple utilisez la touche Espace pour changer l'état vérifié. – Hossein

Répondre

18

Apparemment, aucun signal de ce type n'est fourni, le mieux est d'utiliser QListWidget::itemChanged(QListWidgetItem* item) et d'analyser le item->checkState() résultant. Cela devrait être une légère amélioration par rapport à l'utilisation itemClicked

+0

C'est un signal protégé. Je vais faire face à une erreur lorsque j'utilise cette erreur comme expliqué [ici] (https://stackoverflow.com/q/48059796/1080355). – VSB

0

Une option supplémentaire est d'utiliser votre propre QAbstractListModel avec un QListView. Au début, cela ajoute du code supplémentaire car vous devez ajouter votre propre code de gestion. Mais vous obtenez un accès de niveau inférieur. Fondamentalement parce que le QListView demandera à votre modèle quoi faire. Il relaiera également l'entrée à votre modèle de liste où vous pouvez vous y accrocher.

Vous pouvez également sous-classer QStandardItemModel et vérifier certaines modifications liées à la modification de la case à cocher.