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
9
A
Odpowiedz
17
W zależności od tego, czy kodowanie wszystko albo robi rzeczy w projektancie, ustaw
editTriggers
doQAbstractItemView::NoEditTriggers
selectionBehavior
doQAbstractItemView::SelectRows
- ewentualnie ustawić
selectionMode
doQAbstractItemView::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
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
To się nazywa QAbstractItemView :: NoEditTriggers, QAbstractItemView :: SelectRows i QAbstractItemView :: SingleSelection, ale dokładnie tego szukałem. Dziękuję Ci! – Berschi