Domanda

Voglio recuperare un elenco di nomi di persone da una coda e, per ogni persona, posizionare una casella di controllo con il loro nome in un QGridLayout usando la funzione addWidget (). Posso posizionare correttamente gli elementi in un QListView, ma si limitano a scrivere uno sopra l'altro anziché creare una nuova riga. Qualcuno ha qualche idea su come potrei risolvere questo problema?

self.chk_People = QtGui.QListView()
items = self.jobQueue.getPeopleOffQueue()

for item in items:
    QtGui.QCheckBox('%s' % item, self.chk_People)

self.jobQueue.getPeopleOffQueue () restituirebbe qualcosa del tipo ['Bob', 'Sally', 'Jimmy'] se questo aiuta.

È stato utile?

Soluzione

Questa riga:

QtGui.QCheckBox('%s' % item, self.chk_People)

Non aggiunge la casella di controllo alla vista elenco, la crea solo con la vista elenco come genitore e c'è una grande differenza.

Il modo più semplice di utilizzare una vista elenco è la classe di convenienza QListWidget . Per questo, crea le tue caselle di controllo come istanze di QListWidgetItem e quindi usa addItem sul widget elenco per aggiungerle realmente ad esso.

Hai avuto problemi ad aggiungerli a un layout di griglia? Di solito, se la quantità di caselle di controllo che hai è piccola, un layout di griglia potrebbe essere migliore - tutto dipende da come vuoi che app appaia. Ma se potresti avere molti di questi oggetti, allora un widget / vista elenco è il migliore.

Altri suggerimenti

Non posso dirti la soluzione in PyQt ma la struttura che devi seguire è la seguente. QListView può fare ciò di cui hai bisogno, non è necessario creare caselle di controllo separate. Crea una sottoclasse di QAbstractItemModel o QStandardItemModel (a seconda di quanta codifica vorrai fare) sovrascrivi < codice> flags () per restituire i flag appropriati compreso Qt :: ItemIsUserCheckable , nel metodo columncount () aggiungi una colonna aggiuntiva per includere la casella di controllo e nei dati per la colonna in cui vuoi che appaia la tua casella di controllo restituisce lo stato controllato Qt :: Checked , Qt :: Unchecked per Qt :: CheckStateRole .

Ciò può essere realizzato anche utilizzando QListWidget dove è possibile utilizzare QListWidgetItem per aggiungere dati e non bisogno di creare un modello. Su QListWidgetItem puoi usare setFlags () e setData (QVariant (bool, Qt :: CheckStateRole) senza dover sottoclassare un modello

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top