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?

Était-ce utile?

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

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top