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
9
A
Antwort
17
Je nachdem, ob Sie alles codieren oder Dinge im Designer zu tun, setzen
editTriggers
zuQAbstractItemView::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
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
es QAbstractItemView :: NoEditTriggers, QAbstractItemView :: SelectRows und QAbstractItemView genannt :: SingleSelection, aber genau das habe ich gesucht. Vielen Dank! – Berschi