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

12

我使用了 QSqlTableModel 创建了一个 QTableView。 默认情况下,双击单元格会选中单元格,用户可以编辑它们。 我希望用户不能这样做。他只能通过单击单个单元格来选中整行,但不能编辑单元格。 我该怎么做?

4个回答

22

根据您是在编写代码还是在设计器中进行操作,设置以下内容:

  • editTriggersQAbstractItemView::NoEditTriggers
  • selectionBehaviorQAbstractItemView::SelectRows
  • 如果您希望用户只能选择一行,则可以选择设置 selectionModeQAbstractItemView::SingleSelection

在tableview对象上,所有适当的调用都将以set为前缀,例如在设计器中,您可以在AbstractItemView部分找到这些选项。


它被称为QAbstractItemView :: NoEditTriggers,QAbstractItemView :: SelectRows和QAbstractItemView :: SingleSelection,但这正是我正在寻找的。谢谢! - Berschi
但是将其设置回AllEditTriggers后,就无法再进行编辑了。 - Sayan Bera

11

尝试这个:

table->setEditTriggers(QAbstractItemView::NoEditTriggers);

4

关闭表格项的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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接