QTableView - no permite al usuario editar celular
-
19-09-2019 - |
Pregunta
He creado un QTableView con un QSqlTableModel. Por norma, haciendo doble clic sobre las células marcará ellos y el usuario puede editarlos. Quiero, que el usuario no tiene permiso para hacerlo. Se le permite marcar toda la fila haciendo clic en una sola célula, pero no para editar la celda. ¿Cómo puedo hacer eso?
Solución
Dependiendo de si se está codificando todo o hacer cosas en el diseñador, set
-
editTriggers
aQAbstractItemView::NoEditTriggers
-
selectionBehavior
aQAbstractItemView::SelectRows
- set opcionalmente
selectionMode
aQAbstractItemView::SingleSelection
si desea que el usuario seleccionar exactamente una fila
en el objeto tableview las llamadas apropiadas serán todos prefijo set
por ejemplo setEditTriggers()
en el diseñador puede encontrar estas opciones en la sección AbstractItemView
Otros consejos
Prueba esto:
table->setEditTriggers(QAbstractItemView::NoEditTriggers);
Alternar fuera poco ItemIsEditable
del elemento de la tabla. por ejemplo:.
QTableWidgetItem* item = new QTableWidgetItem(...);
...
item->setFlags(item->flags() &= ~Qt::ItemIsEditable);
Lo ideal es que se desea utilizar:
void QAbstractItemView::setItemDelegate ( QAbstractItemDelegate * delegate )
Y a continuación, crear una clase que hereda de QItemDelegate
como en este ejemplo.
La edición de su clase con el fin de tener
QWidget * QItemDelegate::createEditor ( QWidget * parent, const QStyleOptionViewItem & option, const QModelIndex & index ) const
retorno NULL
o uso:
table->setEditTriggers(QAbstractItemView::NoEditTriggers);
También tendrá que buscar a
void setSelectionBehavior ( QAbstractItemView::SelectionBehavior behavior )
Con el parámetro: QAbstractItemView::SelectRows
Para referencia: http://doc.trolltech.com/4.5/qtableview.html