2009-08-25 13 views
9

Creé una QTableView con QSqlTableModel. De forma estándar, hacer doble clic en las celdas las marcará y el usuario puede editarlas. Quiero que el usuario no pueda hacer eso. Él puede marcar toda la fila haciendo clic en una sola celda, pero no para editar la celda. ¿Cómo puedo hacer eso?QTableView: no permite que el usuario edite la celda

Respuesta

17

Dependiendo de si se está codificando todo o hacer cosas en el diseñador, establezca

  • editTriggers a QAbstractItemView::NoEditTriggers
  • selectionBehavior a QAbstractItemView::SelectRows
  • opcionalmente establecer selectionMode a QAbstractItemView::SingleSelection si desea que el usuario seleccione 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

+0

se llama QAbstractItemView :: NoEditTriggers, QAbstractItemView :: SelectRows y QAbstractItemView :: SingleSelection, pero es exactamente lo que estaba buscando. ¡Gracias! – Berschi

8

Prueba esto:

table->setEditTriggers(QAbstractItemView::NoEditTriggers); 
2

OFF CON ItemIsEditable bits del elemento de la tabla. ej .:

QTableWidgetItem* item = new QTableWidgetItem(...); 
... 
item->setFlags(item->flags() &= ~Qt::ItemIsEditable); 
1

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 this ejemplo. Edición de la clase para 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 en

void setSelectionBehavior (QAbstractItemView::SelectionBehavior behavior) 

Con el parámetro: QAbstractItemView::SelectRows

Como referencia: http://doc.trolltech.com/4.5/qtableview.html

Cuestiones relacionadas