【发布时间】:2016-12-30 03:52:45
【问题描述】:
在我的项目中,我继承了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 信号时,如何将数据写回模型?我在这里遗漏了什么吗?
【问题讨论】:
标签: c++ qt qstyleditemdelegate