在QTreeView中,如果用户正在编辑previousIndex并且点击TAB,则为currentIndex打开编辑器,默认行为是打开一个空白的textedit,这样如果用户再次立即点击TAB,则光标移动到nextIndex并且模型接收到setData(currentIndex) ,QVariant())以空QVariant作为数据。
是否可以改变这种行为,以便通过点击TAB,用户打开一个编辑器但是现有的数据仍然存在,以便用户需要明确删除它?
我想我可以通过使用来实现这一目标
void QAbstractItemDelegate::setEditorData(QWidget *editor, const QModelIndex &index) const
但我不知道在哪里拨打电话。
我正在与类似的问题作斗争,在qtreeview中编辑单元格正在清除单元格,而不是突出显示当前文本。
我在试图找到答案时找到了你的问题,所以也许我的经验会很有用。
我的问题出在我的model :: data()方法中。
我有一个提前退出测试:
if (role != Qt::DisplayRole)
return QVariant();
这是按设计工作 - 一进入编辑模式,它就返回一个空值。
我将EditRole添加到测试中并且它正常工作。
if (role != Qt::DisplayRole && role != Qt::EditRole)
return QVariant();