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?

¿Fue útil?

Solución

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

  • editTriggers a QAbstractItemView::NoEditTriggers
  • selectionBehavior a QAbstractItemView::SelectRows
  • set opcionalmente selectionMode a QAbstractItemView::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

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top