我目前正在尝试将编辑功能添加到派生自QTableView
的类。我添加了一个应该提供编辑功能的自定义委托。但是,如果我在代表的开头做了一个简单的qDebug() << "FieldDelegate::createEditor()";
,我可以看到这个函数永远不会被调用。我试图看看Qt4文档中的示例以及“C ++ Gui使用QT4编程”一书中的示例,但我所能找到的仅仅是QTableWidgets
代表的示例,而不是QTableViews
。但在我的情况下,我需要一个自定义数据模型,所以我不想复制QTableWidgetItems
中的任何数据。如何编辑QTableView
到目前为止,我做了以下内容:
- 我添加使用
QAbstractItemModel::setItemDelegate()
- 我使用
setEditTriggers(QAbstractItemView::DoubleClicked)
当我双击一个项目什么也没有发生在这个激活的编辑功能的自定义委托建立。 FieldDelegate::createEditor()
根本不被调用。
我也试过doubleClicked()
信号从QAbstractItemView
连接到同一类的edit()
插槽,但每当我双击单元格这只是给我的消息edit: editing failed
。
到目前为止,我不会从DatabaseModel::data()
方法中返回除Qt::EditRole
之外的其他任何角色。这与最后一种情况类似,我想在表格的底部添加一个空行,用于添加新数据。这会导致问题吗?
下面是查看施工代码:
DocumentChoiceView::DocumentChoiceView(DatabaseModel * model,
QWidget * parent) :
QTableView(parent),
m_model(model)
{
setShowGrid (false);
setModel(m_model);
setItemDelegate(m_model->delegate().get());
setEditTriggers(QAbstractItemView::DoubleClicked);
connect(this, SIGNAL(doubleClicked(const QModelIndex&)),
this, SLOT(edit(const QModelIndex&)));
verticalHeader()->hide();
}
你从模型返回相应的标志? http://doc.qt.nokia.com/4.7-snapshot/model-view-programming.html#making-the-model-editable – 2012-01-09 22:29:55
@KimBowlesSørhus:是的,这似乎是问题所在。我想我主要关注的是教程,而对于实际的文档还不够。现在一切正常。如果您将此作为答案,我会接受它。 – LiKao 2012-01-10 07:25:31