2009-08-25 114 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