Qt 停止更新单个QModelIndex

Qt 停止更新单个QModelIndex,qt,qtreeview,qmodelindex,Qt,Qtreeview,Qmodelindex,我有一个QTreeView,其中的数据随着时间的推移而变化,qabstractemodel中每秒都会发出一个dataChanged信号。QTreeView中的项目也可以编辑,但是当为某个项目打开编辑器时,编辑器字符串会在编辑时更新,这非常烦人。有什么方法可以防止编辑器被更新为新值吗?您是否将自己的模型与QTreeView一起使用?在这种情况下,您将覆盖它,并且不会为Qt::EditRole返回任何数据。如果对您不方便(您希望在开始编辑时字段中有当前数据),那么您可以创建自己的QItemDeleg

我有一个QTreeView,其中的数据随着时间的推移而变化,qabstractemodel中每秒都会发出一个dataChanged信号。QTreeView中的项目也可以编辑,但是当为某个项目打开编辑器时,编辑器字符串会在编辑时更新,这非常烦人。有什么方法可以防止编辑器被更新为新值吗?

您是否将自己的模型与QTreeView一起使用?在这种情况下,您将覆盖它,并且不会为Qt::EditRole返回任何数据。如果对您不方便(您希望在开始编辑时字段中有当前数据),那么您可以创建自己的QItemDelegate/QStyledItemDelegate并在那里实现一些自定义逻辑:例如,当小部件有焦点时,使其不更新为新值


尽管我可能遗漏了一些内容,但有一种更简单的方法可以做到这一点。

如果代理拥有焦点,我如何防止更新?简单地重写update()会阻止在我键入值时显示我的输入,不是吗?我不是100%相信这个方法会起作用,但是尝试重写virtual void Q[Styled]itemdegate::setEditorData(QWidget*editor,const QModelIndex&index)const,如果editor->hasFocus()为true,则在主体中什么都不做。否则调用基本实现。