12

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

4

4 回答 4

21

根据您是在设计器中编写所有代码还是在做事,设置

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

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

于 2009-08-25T14:28:23.030 回答
11

试试这个:

table->setEditTriggers(QAbstractItemView::NoEditTriggers);
于 2009-08-25T14:13:31.760 回答
4

切换表项的ItemIsEditable位。例如:

QTableWidgetItem* item = new QTableWidgetItem(...);
...
item->setFlags(item->flags() &= ~Qt::ItemIsEditable);
于 2009-08-25T14:14:15.193 回答
1

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

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 )

使用参数:QAbstractItemView::SelectRows

供参考: http ://doc.trolltech.com/4.5/qtableview.html

于 2009-08-25T14:17:08.557 回答