QTableView – не разрешать пользователю редактировать ячейку

StackOverflow https://stackoverflow.com/questions/1328492

  •  19-09-2019
  •  | 
  •  

Вопрос

Я создал QTableView с QSqlTableModel.По умолчанию двойной щелчок по ячейкам помечает их, и пользователь может их редактировать.Я хочу, чтобы пользователю не разрешалось это делать.Ему разрешено отметить всю строку, щелкнув одну ячейку, но не редактировать ячейку.Как мне это сделать?

Это было полезно?

Решение

В зависимости от того, все ли вы кодируете или делаете что-то в дизайнере, установите

  • editTriggers к QAbstractItemView::NoEditTriggers
  • selectionBehavior к QAbstractItemView::SelectRows
  • опционально установить selectionMode к QAbstractItemView::SingleSelection если вы хотите, чтобы пользователь выбрал ровно одну строку

в объекте tableview все соответствующие вызовы будут иметь префикс set например setEditTriggers() в Дизайнере вы можете найти эту опцию в AbstractItemView раздел

Другие советы

Попробуй это:

table->setEditTriggers(QAbstractItemView::NoEditTriggers);

Отключить элемент таблицы ItemIsEditable кусочек.например.:

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

В идеале вы захотите использовать:

void QAbstractItemView::setItemDelegate ( QAbstractItemDelegate * delegate )

А затем создайте класс, который наследуется от QItemDelegate как в этот пример.Редактирование вашего класса, чтобы иметь

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

возвращаться NULL

или используйте:

table->setEditTriggers(QAbstractItemView::NoEditTriggers);

Вам также захочется посмотреть

void setSelectionBehavior ( QAbstractItemView::SelectionBehavior behavior )

С параметром: QAbstractItemView::SelectRows

Для справки:http://doc.trolltech.com/4.5/qtableview.html

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top