在我的项目中,我QStyledItemDelegate
从函数中继承并返回了一个自定义编辑器createEditor
。
QWidget* TagEditDelegate::createEditor(QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index) const
{
TagEditWidget* tagEditWidget = new TagEditWidget(parent, index.data(Qt::UserRole+4).toInt(), index.data(Qt::UserRole+2).toByteArray(), index.data(Qt::UserRole+3).toByteArray(), index.parent().data(Qt::UserRole+4).toInt() == 9, parent->width());
return tagEditWidget; //tagEditWidget is my custom QWidget
}
编辑完成后,我想将新数据写回模型。所以我覆盖了setModelData
.
void TagEditDelegate::setModelData(QWidget * editor, QAbstractItemModel * model, const QModelIndex & index) const
{
TagEditWidget * tagEditWidget = qobject_cast<TagEditWidget*>(editor);
if (!tagEditWidget)
{
QStyledItemDelegate::setModelData(editor, model, index);
return;
}
//Edit model here?
}
这可行,但问题是setModelData
无论编辑器如何关闭都会被调用。EndEditHint
如果编辑器使用,关闭,我只想写入新数据QAbstractItemDelegate::SubmitModelCache
。所以我将closeEditor
信号连接到我制作的一个名为editFinished
.
connect(this, SIGNAL(closeEditor(QWidget*,QAbstractItemDelegate::EndEditHint)), this, SLOT(editFinished(QWidget*,QAbstractItemDelegate::EndEditHint)));
所以现在我可以看到编辑器是如何关闭的,EndEditHint
以及是否应该将数据写回模型。Buuuuut,在信号setModelData
之前调用。closeEditor
最后一次调用信号时,如何将数据写回模型closeEditor
?我在这里错过了什么吗?