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
9
A
risposta
17
A seconda se si esegue la codifica tutto o fare le cose nella finestra di progettazione, impostare
editTriggers
aQAbstractItemView::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
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
si chiama QAbstractItemView :: NoEditTriggers, QAbstractItemView :: SelectRows e QAbstractItemView :: SingleSelection, ma è esattamente quello che stavo cercando. Grazie! – Berschi