2009-08-25 16 views
9

Utworzono QTableView z QSqlTableModel. Standardowo dwukrotne kliknięcie na komórki zaznacza je, a użytkownik może je edytować. Chcę, aby użytkownik nie mógł tego robić. Może zaznaczyć cały wiersz, klikając pojedynczą komórkę, ale nie edytować komórki. Jak mogę to zrobić?QTableView - nie zezwala użytkownikowi na edycję komórki

Odpowiedz

17

W zależności od tego, czy kodowanie wszystko albo robi rzeczy w projektancie, ustaw

  • editTriggers do QAbstractItemView::NoEditTriggers
  • selectionBehavior do QAbstractItemView::SelectRows
  • ewentualnie ustawić selectionMode do QAbstractItemView::SingleSelection jeśli chcesz, aby użytkownik wybrał dokładnie jeden wiersz

na obiekcie Tableview odpowiednie połączenia będą wszyscy być poprzedzona set np setEditTriggers() w projektancie można znaleźć te opcję w sekcji AbstractItemView

+0

To się nazywa QAbstractItemView :: NoEditTriggers, QAbstractItemView :: SelectRows i QAbstractItemView :: SingleSelection, ale dokładnie tego szukałem. Dziękuję Ci! – Berschi

8

Spróbuj:

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

Przełączanie się element tablicy za ItemIsEditable bit. np .:

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

Idealnie będzie chciał użyć:

void QAbstractItemView::setItemDelegate (QAbstractItemDelegate * delegate) 

a następnie utworzyć klasę, która dziedziczy QItemDelegate jak w this przykład. Edycja swoją klasę mieć

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

powrót NULL

lub zastosowanie:

table->setEditTriggers(QAbstractItemView::NoEditTriggers); 

Będziesz także chcą patrzeć na

void setSelectionBehavior (QAbstractItemView::SelectionBehavior behavior) 

Z parametru: QAbstractItemView::SelectRows

Dla porównania: http://doc.trolltech.com/4.5/qtableview.html

Powiązane problemy