Pregunta

Quiero mostrar un QListView donde cada elemento es una casilla de verificación con alguna etiqueta.Las casillas de verificación deben ser visibles en todo momento.Una forma en que puedo pensar es el uso de un delegado personalizado y QAbstractListModel.Hay maneras más simples?Puede usted proporcionar la más simple trozo de código que hace esto?

Gracias de antemano

¿Fue útil?

Solución

Si usted está escribiendo su propio modelo, basta con incluir el Qt.ItemIsUserCheckable bandera en el valor de retorno del método flags(), y asegurarse de que regrese un valor válido para el Qt.CheckStateRole del método data().

Si se utiliza la clase QStandardItemModel, incluya el setFlags() bandera en los que se pasa al método de cada elemento setData(), y se establece el cheque Estado para la <=> con su método <=>.

En una sesión interactiva de Python, escriba lo siguiente:

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()

Otros consejos

Terminé usando el método proporcionado por David Boddie en el PyQt lista de correo.He aquí un trabajo fragmento de código basado en su código:

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_()

Nota:cambió la llamada de setData con un cheque de papel setCheckState y se utiliza setCheckable en lugar de banderas.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top