在QTreeView中,如果用户正在编辑previousIndex并单击TAB,则将打开currentIndex的编辑器,默认行为是打开一个空白的textedit,以便如果用户立即再次单击TAB,则光标将移至nextIndex并且模型收到setData(currentIndex,QVariant()),带有一个空QVariant作为数据。
是否可以更改此行为,以便通过单击TAB来打开编辑器,但已有的数据仍保留在其中,以便用户需要显式删除它?
我想我可以使用
完成此操作void QAbstractItemDelegate::setEditorData(QWidget *editor, const QModelIndex &index) const
但是我不确定将呼叫放在哪里。
答案 0 :(得分:1)
我只是在与一个类似的问题作斗争,即在qtreeview中编辑单元格会清除该单元格,而不是突出显示当前文本。
我在尝试找到答案时发现了您的问题,所以也许我的经验会有所帮助。
我的问题出在我的model :: data()方法中。
我进行了提前退出测试:
if (role != Qt::DisplayRole)
return QVariant();
这按设计工作-当我进入编辑模式时,它返回一个空值。
我在测试中添加了EditRole,它可以正常工作。
if (role != Qt::DisplayRole && role != Qt::EditRole)
return QVariant();