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

C++ QTableView-不允许用户编辑单元格,c++,qt,qt4,qtableview,C++,Qt,Qt4,Qtableview,我用QSqlTableModel创建了一个QTableView。 根据标准,双击单元格将标记它们,用户可以编辑它们。 我希望,用户不允许这样做。他可以通过单击单个单元格来标记整行,但不能编辑单元格。 我该怎么做呢?试试这个: table->setEditTriggers(QAbstractItemView::NoEditTriggers); 关闭表项的ItemIsEditable位。e、 g: QTableWidgetItem* item = new QTableWidgetItem(.

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

试试这个:

table->setEditTriggers(QAbstractItemView::NoEditTriggers);

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

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 )
使用参数:
qabstractemview::SelectRows

供参考:

根据您是在设计器中编写所有代码还是执行某些操作,设置

  • editTriggers
    to
    qabstractemview::NoEditTriggers
  • selectionBehavior
    to
    QAbstractItemView::SelectRows
  • 如果希望用户只选择一行,可以选择将
    selectionMode
    设置为
    qabstractemview::SingleSelection

在tableview对象上,适当的调用都将以
set
作为前缀,例如
setEditTriggers()
在设计器中,您可以在
AbstractItemView
部分找到这些选项,称为QAbstractItemView::NoEditTriggers,QAbstractItemView::SelectRows和QAbstractItemView::SingleSelection,但这正是我想要的。非常感谢。