QTableView - ne pas permettre à l'utilisateur de modifier cellule
-
19-09-2019 - |
Question
J'ai créé un QTableView avec un QSqlTableModel. En standard, un double-clic sur les cellules marquera eux et l'utilisateur peut les modifier. Je veux que l'utilisateur ne peut pas le faire. Il est permis de marquer toute la ligne en cliquant sur une seule cellule, mais pas pour modifier la cellule. Comment puis-je faire?
La solution
Selon que vous codez tout ou faire des choses dans le concepteur, set
-
editTriggers
àQAbstractItemView::NoEditTriggers
-
selectionBehavior
àQAbstractItemView::SelectRows
- le cas échéant mis
selectionMode
àQAbstractItemView::SingleSelection
si vous voulez que l'utilisateur de sélectionner exactement une ligne
sur l'objet tableview les appels appropriés seront tous préfixés avec set
dans le setEditTriggers()
par exemple Designer, vous pouvez trouver ces options dans la section AbstractItemView
Autres conseils
Essayez ceci:
table->setEditTriggers(QAbstractItemView::NoEditTriggers);
Basculez au large de bit ItemIsEditable
de l'élément de table. par exemple:.
QTableWidgetItem* item = new QTableWidgetItem(...);
...
item->setFlags(item->flags() &= ~Qt::ItemIsEditable);
Idéalement, vous voulez utiliser:
void QAbstractItemView::setItemDelegate ( QAbstractItemDelegate * delegate )
Et puis créez une classe qui hérite de QItemDelegate
comme dans ce exemple.
Modification de votre classe pour avoir
QWidget * QItemDelegate::createEditor ( QWidget * parent, const QStyleOptionViewItem & option, const QModelIndex & index ) const
NULL
de retour
ou de l'utilisation:
table->setEditTriggers(QAbstractItemView::NoEditTriggers);
Vous voudrez aussi regarder
void setSelectionBehavior ( QAbstractItemView::SelectionBehavior behavior )
Avec le paramètre: QAbstractItemView::SelectRows
Pour référence: http://doc.trolltech.com/4.5/qtableview.html