Domanda

Ho una QTableView per il quale voglio visualizzare l'ultima colonna sempre in modalità di modifica. (E 'un QComboBox in cui l'utente dovrebbe essere in grado di cambiare sempre il valore.)

Penso che ho visto la soluzione nel Qt documentazione , ma posso 't trovare più. C'è un modo semplice per farlo?

credo che avrei potuto archiviare questo effetto utilizzando openPersistentEditor() per ogni cellula, ma sto cercando un modo migliore. (Come specificando solo una volta per l'intera colonna.)

È stato utile?

Soluzione

Ci sono due possibilità:

setIndexWidget , ma Trolltech scrive:

  

Questa funzione dovrebbe essere utilizzata solo per   immagini statiche all'interno   area visibile corrispondente ad un elemento   dei dati. Se si desidera visualizzare su misura   contenuti dinamici o implementare un custom   widget di editore, QItemDelegate sottoclasse   invece.

(E si rompe il Model / View modello ...)

metodo paint di un delegato . Ma qui si deve implementare tutto come te abilitati / elementi disabili.

Altri suggerimenti

Un modo per ottenere il comportamento montaggio automatico è quello di chiamare la funzione setEditTriggers della vista () con il valore QAbstractItemView :: AllEditTriggers.

Per visualizzare il contenuto di una data colonna in un certo modo, dare un'occhiata a QAbstractItemView :: setItemDelegateForColumn (). Questo vi permetterà di specificare un delegato personalizzato solo per quelle voci che ne hanno bisogno. Tuttavia, non creerà automaticamente un widget redattore per ciascuno di essi (ci potrebbe in linea di principio essere migliaia di loro), ma si potrebbe usare il delegato per rendere ogni elemento in un modo che lo fa apparire come un widget editore.

Il QAbstractItemModel :: bandiere funzione virtuale è chiamata a verificare se un elemento è modificabile (vedi Qt :: ItemIsEditable ). Date un'occhiata a Rendere il modello modificabile nel Model / View Programmazione documentazione.

Non riesco a vedere un modo semplice per fare questo, ma si potrebbe essere in grado di gestire tramite un delegato. Onestamente non so esattamente come avrebbe funzionato, ma si dovrebbe essere in grado di ottenere qualcosa di lavoro se si tenta già abbastanza difficile. Se si ottiene un delegato corretta, si dovrebbe essere in grado di impostare su una vista intera, una cella di una visione, o semplicemente una colonna o riga.

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