在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();