QTableView - не разрешать пользователю редактировать ячейку - PullRequest
10 голосов
/ 25 августа 2009

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

Ответы [ 4 ]

18 голосов
/ 25 августа 2009

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

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

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

10 голосов
/ 25 августа 2009

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

table->setEditTriggers(QAbstractItemView::NoEditTriggers);
2 голосов
/ 25 августа 2009

Отключить бит ItemIsEditable элемента таблицы. e.g.:

QTableWidgetItem* item = new QTableWidgetItem(...);
...
item->setFlags(item->flags() &= ~Qt::ItemIsEditable);
1 голос
/ 25 августа 2009

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

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

...