Question

Je veux afficher un QListView où chaque élément est une case à cocher avec une étiquette. Les cases doivent être visibles en tout temps. Une façon je peux penser utilise un délégué personnalisé et QAbstractListModel. Y at-il des moyens plus simples? Pouvez-vous fournir l'extrait le plus simple qui fait cela?

Merci d'avance

Était-ce utile?

La solution

Si vous écrivez votre propre modèle, il suffit d'inclure le Qt.ItemIsUserCheckable drapeau de la valeur de retour de la méthode flags(), et assurez-vous que vous revenez une valeur valide pour le Qt.CheckStateRole de la méthode data().

Si vous utilisez la classe QStandardItemModel, inclure le setFlags() drapeau dans ceux que vous passez à la méthode de chaque élément setData() et définissez le contrôle Etat de la <=> avec sa méthode <=>.

Dans une session interactive Python, tapez ce qui suit:

from PyQt4.QtGui import *

model = QStandardItemModel()
item = QStandardItem("Item")
item.setFlags(Qt.ItemIsUserCheckable | Qt.ItemIsEnabled)
item.setData(QVariant(Qt.Checked), Qt.CheckStateRole)
model.appendRow(item)

view = QListView()
view.setModel(model)
view.show()

Autres conseils

Je fini par utiliser la méthode fournie par David Boddie dans la liste de diffusion PyQt. Voici un extrait de travail en fonction de son code:

from PyQt4.QtCore import *
from PyQt4.QtGui import *
import sys
from random import randint


app = QApplication(sys.argv)

model = QStandardItemModel()

for n in range(10):                   
    item = QStandardItem('Item %s' % randint(1, 100))
    check = Qt.Checked if randint(0, 1) == 1 else Qt.Unchecked
    item.setCheckState(check)
    item.setCheckable(True)
    model.appendRow(item)


view = QListView()
view.setModel(model)

view.show()
app.exec_()

Note: changé l'appel avec un rôle setData de contrôle et utilisé pour setCheckState au lieu de drapeaux setCheckable

.
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top