2009-08-25 8 views
9

Ho creato un QTableView con un QSqlTableModel. Normalmente, facendo doppio clic sulle celle, questi verranno contrassegnati e l'utente potrà modificarli. Voglio che l'utente non sia autorizzato a farlo. È autorizzato a contrassegnare l'intera riga facendo clic su una singola cella, ma non a modificare la cella. Come posso farlo?QTableView - non consente all'utente di modificare la cella

risposta

17

A seconda se si esegue la codifica tutto o fare le cose nella finestra di progettazione, impostare

  • editTriggers a QAbstractItemView::NoEditTriggers
  • selectionBehavior-QAbstractItemView::SelectRows
  • facoltativamente impostare selectionMode-QAbstractItemView::SingleSelection se si desidera che l'utente selezioni esattamente una riga

sull'oggetto Tableview le chiamate alle saranno tutti preceduti da set esempio setEditTriggers() nel Designer è possibile trovare questi opzione nella sezione AbstractItemView

+0

si chiama QAbstractItemView :: NoEditTriggers, QAbstractItemView :: SelectRows e QAbstractItemView :: SingleSelection, ma è esattamente quello che stavo cercando. Grazie! – Berschi

8

Prova questa:

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

Toggle off ItemIsEditable po dell'elemento tavolo. es .:

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

Idealmente si vorrà utilizzare:

void QAbstractItemView::setItemDelegate (QAbstractItemDelegate * delegate) 

e quindi creare una classe che eredita da QItemDelegate come in this esempio. Modificare la classe di avere

QWidget * QItemDelegate::createEditor (QWidget * parent, const QStyleOptionViewItem & option, const QModelIndex & index) const 

ritorno NULL

o l'uso:

table->setEditTriggers(QAbstractItemView::NoEditTriggers); 

Potrai anche voler guardare

void setSelectionBehavior (QAbstractItemView::SelectionBehavior behavior) 

Con il parametro: QAbstractItemView::SelectRows

Per riferimento: http://doc.trolltech.com/4.5/qtableview.html