QTableView – не разрешать пользователю редактировать ячейку
-
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