QTableView - 不允许用户编辑单元格

时间:2009-08-25 14:05:29

标签: c++ qt qt4 qtableview

我用QSqlTableModel创建了一个QTableView。 按标准,双击单元格将标记它们,用户可以编辑它们。 我想,不允许用户这样做。允许他通过单击单个单元格来标记整行,但不能编辑单元格。 我怎么能这样做?

4 个答案:

答案 0 :(得分:18)

根据您是否在设计师中编写所有内容或进行操作,请设置

  • editTriggersQAbstractItemView::NoEditTriggers
  • selectionBehaviorQAbstractItemView::SelectRows
  • 如果您希望用户只选择一行,可以选择将selectionMode设置为QAbstractItemView::SingleSelection

在tableview对象上,相应的调用都将以set为前缀,例如setEditTriggers(),您可以在AbstractItemView部分找到这些选项

答案 1 :(得分:10)

试试这个:

table->setEditTriggers(QAbstractItemView::NoEditTriggers);

答案 2 :(得分:2)

关闭表项的ItemIsEditable位。 e.g:

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

答案 3 :(得分:1)

理想情况下,您会想要使用:

void QAbstractItemView::setItemDelegate ( QAbstractItemDelegate * delegate )

然后在this示例中创建一个继承自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