2009-02-09 15 views
6

Tengo un QTableView para el que quiero mostrar la última columna siempre en modo de edición. (Es un QComboBox donde el usuario debería poder cambiar siempre el valor.)¿Cómo le digo a Qt que siempre muestre un editor en QTableView?

Creo que he visto la solución en el Qt documentation, pero no puedo encontrarla más. ¿Hay una forma simple de hacerlo?

Creo que podría archivar este efecto utilizando openPersistentEditor() para cada celda, pero estoy buscando una mejor manera. (Como especificarlo solo una vez para toda la columna.)

Respuesta

4

hay dos posibilidades:

Usando setIndexWidget, pero escribe Trolltech:

Esta función sólo se debe utilizar para el contenido estático pantalla dentro del área visible correspondiente a un elemento de datos. Si desea mostrar el contenido dinámico personalizado o implementar un widget de editor personalizado , en su lugar, subclase QItemDelegate .

(y se rompe el modelo/patrón de Vista ...)

O usando a delegate's paint method. Pero aquí tienes que implementar todo como elementos habilitados/deshabilitados tú mismo.

0

No veo una manera fácil de hacerlo, pero es posible que pueda administrarlo mediante un delegado. Honestamente, no sé exactamente cómo funcionaría, pero deberías poder hacer algo que funcione si lo intentas lo suficiente. Si obtiene un delegado adecuado, debería poder configurarlo en una vista completa, una celda de una vista o solo una columna o fila.

3

Una forma de obtener el comportamiento de edición automática es llamar a la función setEditTriggers() de la vista con el valor QAbstractItemView :: AllEditTriggers.

Para mostrar el contenido de una columna determinada de cierta manera, eche un vistazo a QAbstractItemView :: setItemDelegateForColumn(). Esto le permitirá especificar un delegado personalizado solo para aquellos artículos que lo necesitan. Sin embargo, no creará automáticamente un widget editor para cada uno de ellos (en principio podría haber miles de ellos), pero podría usar el delegado para representar cada elemento de manera que parezca un widget de editor.

Cuestiones relacionadas