2009-08-25 118 views
9

我使用QSqlTableModel創建了一個QTableView。 按標準,雙擊單元格會標記它們,用戶可以編輯它們。 我想要的是,用戶不允許這樣做。他可以通過點擊單個單元格來標記整行,但不能編輯單元格。 我該怎麼做?QTableView - 不允許用戶編輯單元格

回答

17

根據您是否正在編寫任何代碼或設計師做的事情,設置

  • editTriggersQAbstractItemView::NoEditTriggers
  • selectionBehaviorQAbstractItemView::SelectRows
  • 選擇設置selectionModeQAbstractItemView::SingleSelection如果您希望用戶選擇恰好一行

適當的調用都將用在設計set例如setEditTriggers()前綴的tableview對象上,你可以找到在AbstractItemView部分

+0

這就是所謂的QAbstractItemView中:: NoEditTriggers,QAbstractItemView中:: SelectRows和QAbstractItemView中::這些選項SingleSelection,但這正是我正在尋找的。謝謝! – Berschi 2009-08-25 14:34:10

8

試試這個:

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

切換掉的表項的ItemIsEditable位。例如: -

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

理想情況下,你將要使用:

void QAbstractItemView::setItemDelegate (QAbstractItemDelegate * delegate) 

,然後創建一個從QItemDelegate繼承像this例如一類。 編輯類有

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