5 qt qt4 qtreeview qabstractitemmodel
我的Qt /面试申请表有问题.我使用QTreeView来显示树数据.我基于QAbstractItemModel实现了自己的模型.
在应用程序崩溃之前我收到以下错误.它经常在我添加新记录后发生.
你能解释一下这个错误是什么意思吗?什么是QPersistentModelIndex?我在代码中没有使用QPersistentModelIndex.
ASSERT failure in QPersistentModelIndex::~QPersistentModelIndex: "persistent model indexes corrupted"
Run Code Online (Sandbox Code Playgroud)
谢谢.
QPersistentModelIndexes是(行,列,父)对引用项在模型内移动时自动更新的项的引用,与常规项不同QModelIndex.
例如,如果插入一行,则位于插入点下方的所有现有持久性索引的row属性将增加1.
例如,您不能直接使用它们,但QTreeView可以跟踪扩展项目和所选项目.
并且要更新这些持久性索引,您必须在添加新记录时调用函数QAbstractitemModel::beginInsertRows()和endInsertRows()实际行插入.
有关详细信息,请参阅有关子类化模型类的部分的结尾:http://doc.trolltech.com/latest/qabstractitemmodel.html#subclassing
我找到了这个方法
QAbstractItemModel::persistentIndexList,我想知道它应该返回什么索引.他们都是 ?
此方法是否应返回TreeView中当前可见的所有节点?
该方法仅返回QPersistentIndexModel已创建a且仍在范围内的索引(作为局部变量,类成员或在QList<QPersistentIndexModel>例如中).
扩展或选定的节点当前不一定是可见的,因此您不能(也不应该)假设这些持久性索引的用途.
您只需要更新它们,您只需要使用persistentIndexList模型中的重大更改,例如排序(请参阅QTreeWidget内部模型:( QTreeModel::ensureSorted链接)),以获得所有beginXxxRows/beginXxxColumns和endXxxRows/endXxxColumns方法的较小增量更改.