【发布时间】:2010-11-22 15:28:37
【问题描述】:
我用 QSqlTableModel 创建了一个 QTableView。 按照标准,双击单元格将标记它们并且用户可以编辑它们。 我想要,不允许用户这样做。他可以通过单击单个单元格来标记整行,但不能编辑该单元格。 我该怎么做?
【问题讨论】:
标签: c++ qt qt4 qtableview
我用 QSqlTableModel 创建了一个 QTableView。 按照标准,双击单元格将标记它们并且用户可以编辑它们。 我想要,不允许用户这样做。他可以通过单击单个单元格来标记整行,但不能编辑该单元格。 我该怎么做?
【问题讨论】:
标签: c++ qt qt4 qtableview
根据你是在设计器中编写所有代码还是在做事情,设置
editTriggers 到 QAbstractItemView::NoEditTriggers
selectionBehavior 到 QAbstractItemView::SelectRows
selectionMode 设置为 QAbstractItemView::SingleSelection
在 tableview 对象上,适当的调用都将以 set 为前缀,例如在 Designer 中 setEditTriggers() 您可以在 AbstractItemView 部分找到这些选项
【讨论】:
理想情况下你会想要使用:
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
【讨论】:
关闭表格项的ItemIsEditable 位。例如:
QTableWidgetItem* item = new QTableWidgetItem(...);
...
item->setFlags(item->flags() &= ~Qt::ItemIsEditable);
【讨论】:
试试这个:
table->setEditTriggers(QAbstractItemView::NoEditTriggers);
【讨论】: