QTreeView:如果未键入任何内容,则不要更新索引

QTreeView: Do not update index if nothing has been typed

本文关键字:更新索引 任何内 如果 QTreeView      更新时间:2023-10-16

在QTreeView中,如果用户正在编辑previousIndex并点击TAB,则会为currentIndex打开编辑器,则默认行为是打开一个空白的文本编辑,以便如果用户立即再次点击TAB,光标移动到nextIndex,模型收到一个setData(currentIndex,QVariant(( (,其中包含空的QVariant作为数据。

是否可以更改此行为,以便用户通过按 TAB 打开编辑器,但已经存在的数据仍然存在,以便用户需要显式删除它?

我想我可以通过使用

void QAbstractItemDelegate::setEditorData(QWidget *editor, const QModelIndex &index) const

但我不确定在哪里打电话给它。

我只是在与一个类似的问题作斗争,即在 qtreeview 中编辑单元格是清除单元格,而不是突出显示当前文本。

我在试图找到答案时发现了你的问题,所以也许我的经验会很有用。

我的问题出在我的模型::d ata(( 方法中。

我做了提前退出测试:

if (role != Qt::DisplayRole) 
return QVariant();

这是按设计工作的 - 一旦我进入编辑模式,它就会返回一个空值。

我将编辑角色添加到测试中,它工作正常。

if (role != Qt::DisplayRole && role != Qt::EditRole) 
return QVariant();