Qt QTableView comment avoir une case à cocher, seule colonne
Nous sommes à l'aide d'un QTableView
avec Qt 4.6.3, et besoin d'une colonne qui n'a qu'une case à cocher dans chaque cellule. Nous sommes à l'aide d'une sous-classe personnalisée de QAbstractTableModel
comme modèle pour la QTableView
. Maintenant, nous avons une case à cocher par le réglage de la Qt::ItemIsUserCheckable
drapeau. Mais nous ne pouvons pas comprendre comment se débarrasser de la zone de texte vide à côté de la case!
Comment pouvons-nous rendre la colonne seulement une case à cocher, rien d'autre?
OriginalL'auteur David Burson | 2010-07-29
Vous devez vous connecter pour publier un commentaire.
Ici est une solution. Pour que cela fonctionne correctement, votre colonne doit pas ont la
Qt::ItemIsEditable
ouQt::ItemIsUserCheckable
indicateurs définis. Il lit les valeurs booléennes à partir deQt::DisplayRole
et les appelssetData()
avecQt::EditRole
(c'est à dire pasQt::CheckStateRole
.)OriginalL'auteur Dave Mateer
Remarque: La réponse de Dave travaille aussi pour Python à l'aide de PySide ou PyQt4. Je l'ai traduit, et il fonctionne très bien. En outre, j'ai ajouté la fonctionnalité que la case à cocher ne pas accepter la saisie de l'utilisateur et est présenté dans un état 'ReadOnly' si la cellule n'est pas modifiable.
Merci Dave pour votre code!
Mateer Vraiment impressionnant....Je suis un peu confus par
if not (index.flags() & Qt.ItemIsEditable) > 0:
. Pourquoi la vérification de l'existence d'un drapeau sur l'index?OriginalL'auteur raorao