¿Cómo le digo Qt para mostrar siempre un editor en un QTableView?
-
22-08-2019 - |
Pregunta
Tengo un QTableView por lo que quiero para mostrar la última columna siempre en modo de edición. (Es un QComboBox donde el usuario debe ser capaz de cambiar siempre el valor.)
Creo que he visto la solución en el Qt documentación , pero no puedo 't encontrar más. ¿Hay una manera sencilla de hacerlo?
Creo que podría archivar este efecto mediante el uso de openPersistentEditor()
de cada célula, pero estoy en busca de una mejor manera. (Al igual que especifica que sólo una vez para toda la columna.)
Solución
Hay dos posibilidades:
setIndexWidget
, pero escribe Trolltech:
Esta función sólo debe utilizarse para mostrar contenido estático dentro de la área visible correspondiente a un elemento de datos. Si desea mostrar personalizada contenido dinámico o implementar una costumbre widget de editor, QItemDelegate subclase en su lugar.
(Y se rompe el patrón Modelo / Vista ...)
de un delegado método paint
. Pero aquí hay que poner en práctica todo como Habilitado / elementos deshabilitados usted mismo.
Otros consejos
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 visualizar el contenido de una columna dada de una manera determinada, echar un vistazo a QAbstractItemView :: setItemDelegateForColumn (). Esto le permitirá especificar un delegado a medida solo para aquellos artículos que lo necesitan. Sin embargo, no creará automáticamente un widget de editor para cada uno de ellos (que podría, en principio, miles de ellos), pero se puede utilizar el delegado para representar cada elemento de una manera que hace que se vea como un widget de editor.
El QAbstractItemModel :: banderas función virtual se llama para probar si un artículo es editable (ver Qt :: ItemIsEditable ). Echar un vistazo a Hacer el modelo editable en el Modelo / Vista Programación documentación.
No puedo ver una manera fácil de hacer esto, pero es posible que pueda administrar mediante un delegado. Sinceramente, no sé exactamente cómo funcionaría, pero usted debería ser capaz de conseguir algo de funcionar si se esfuerza lo suficiente. Si obtiene un delegado adecuada, usted debe ser capaz de establecer en toda una visión, una célula de una vista, o simplemente una columna o fila.