2009-08-25 6 views
9

Ich erstellte eine QTableView mit einem QSqlTableModel. Per Doppelklick auf die Zellen werden diese standardmäßig markiert und der Benutzer kann sie bearbeiten. Ich möchte, dass der Benutzer das nicht tun darf. Er darf die ganze Reihe markieren, indem er auf eine einzelne Zelle klickt, aber nicht die Zelle bearbeitet. Wie kann ich das tun?QTableView - Benutzer nicht erlauben, Zelle zu bearbeiten

Antwort

17

Je nachdem, ob Sie alles codieren oder Dinge im Designer zu tun, setzen

  • editTriggers zu QAbstractItemView::NoEditTriggers
  • selectionBehavior-QAbstractItemView::SelectRows
  • optional eingestellt selectionMode-QAbstractItemView::SingleSelection wenn Sie möchten, dass der Benutzer genau eine Zeile auswählt

auf dem Tableview-Objekt werden die entsprechenden Anrufe alle mit set zB setEditTriggers() in Designer vorangestellt werden Sie diese Option im AbstractItemView Abschnitt finden

+0

es QAbstractItemView :: NoEditTriggers, QAbstractItemView :: SelectRows und QAbstractItemView genannt :: SingleSelection, aber genau das habe ich gesucht. Vielen Dank! – Berschi

8

starten:

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

Toggle aus den ItemIsEditable Bit Tisch Artikeln. z.B .:

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

Im Idealfall werden Sie verwenden möchten:

void QAbstractItemView::setItemDelegate (QAbstractItemDelegate * delegate) 

Und dann eine Klasse erstellen, die von QItemDelegate wie in this Beispiel erbt. Klasse bearbeiten haben

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

Rückkehr NULL

oder -nutzung:

table->setEditTriggers(QAbstractItemView::NoEditTriggers); 

Sie auch bei

void setSelectionBehavior (QAbstractItemView::SelectionBehavior behavior) 

Mit dem Parameter suchen wollen: QAbstractItemView::SelectRows

Zum Vergleich: http://doc.trolltech.com/4.5/qtableview.html