QTreeView:如果未输入任何内容,请勿更新索引

时间:2018-08-18 20:18:36

标签: c++ qt qt5 qtreeview

在QTreeView中,如果用户正在编辑previousIndex并单击TAB,则将打开currentIndex的编辑器,默认行为是打开一个空白的textedit,以便如果用户立即再次单击TAB,则光标将移至nextIndex并且模型收到setData(currentIndex,QVariant()),带有一个空QVariant作为数据。

是否可以更改此行为,以便通过单击TAB来打开编辑器,但已有的数据仍保留在其中,以便用户需要显式删除它?

我想我可以使用

完成此操作
void QAbstractItemDelegate::setEditorData(QWidget *editor, const QModelIndex &index) const

但是我不确定将呼叫放在哪里。

1 个答案:

答案 0 :(得分:1)

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

我在尝试找到答案时发现了您的问题,所以也许我的经验会有所帮助。

我的问题出在我的model :: data()方法中。

我进行了提前退出测试:

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

这按设计工作-当我进入编辑模式时,它返回一个空值。

我在测试中添加了EditRole,它可以正常工作。

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