J'ai créé QTableView avec un QSqlTableModel. En standard, un double-clic sur les cellules les marquera et l'utilisateur pourra les éditer. Je veux que l'utilisateur ne soit pas autorisé à le faire. Il est autorisé à marquer la ligne entière en cliquant sur une seule cellule, mais pas pour éditer la cellule. Comment puis-je faire cela?QTableView - ne pas autoriser l'utilisateur à modifier la cellule
9
A
Répondre
17
Selon que vous codez tout ou faire des choses dans le concepteur, définissez
editTriggers
àQAbstractItemView::NoEditTriggers
selectionBehavior
-QAbstractItemView::SelectRows
- manière optionnelle
selectionMode
-QAbstractItemView::SingleSelection
si vous voulez que l'utilisateur sélectionne exactement une ligne
sur l'objet tableview les appels appropriés seront tous préfixés avec set
par exemple setEditTriggers()
dans le Designer, vous pouvez trouver ces options dans la section AbstractItemView
8
Essayez ceci:
table->setEditTriggers(QAbstractItemView::NoEditTriggers);
2
bascule hors ItemIsEditable
de l'élément de table bits. .: par exemple
QTableWidgetItem* item = new QTableWidgetItem(...);
...
item->setFlags(item->flags() &= ~Qt::ItemIsEditable);
1
Idéalement, vous voulez utiliser:
void QAbstractItemView::setItemDelegate (QAbstractItemDelegate * delegate)
Et puis créez une classe qui hérite de QItemDelegate
comme dans this exemple. Modification de votre classe d'avoir
QWidget * QItemDelegate::createEditor (QWidget * parent, const QStyleOptionViewItem & option, const QModelIndex & index) const
retour NULL
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
il est appelé QAbstractItemView :: NoEditTriggers, QAbstractItemView :: SelectRows et QAbstractItemView :: SingleSelection, mais c'est exactement ce que je cherchais. Je vous remercie! – Berschi