Qt 报错:~QPersistentModelIndex: "persistent model indexes corrupted"
在做treeview/model的时候,新插入树节点(二级节点),发现有这个报错,奇怪的是MSVC有这个错误,但是换成MinGw就没有了,那就说明代码没啥问题,应该是内部QModelIndex刷新问题导致,但是也不能忽视。
查资料,比较靠谱的回答是这两个
https://stackoverflow.com/questions/7395162/qt-error-persistent-model-indexes-corrupted-why
https://www.cnblogs.com/qtchina/archive/2010/06/16/1759157.html
但是只讲解了原理,没有给出解决方法,最后发现一个靠谱的方法,
void QAbstractItemModel::beginResetModel()
void QAbstractItemModel::endResetModel()
每次插入节点后进行模型重置,理论上可以同步更新QModelIndex;
但是每次重置后,节点都会重新折叠,那么需要自己写一个记录每个节点状态的方法,重置后再次读取恢复即可。
暂时只找到这个方法,后续有好方法继续更新。。。。。。。。。
************************************************
更新新方法,在插入代码前后加入两行代码,如下
funtion insertRows { // 发送模型layout即将改变信号 emit layoutAboutToBeChanged(); /* 插入树节点代码 */ // 发送模型layout已改变信号 emit layoutChanged(); };
收到这两个信号后,会更新模型项,加了这两行代码不需要展开折叠也会显示新的添加项。且不会改变展开和折叠状态。。。。。。
*******************************
最新方法。。。如果以上方法都不行,重启Qt creator恢复。。。。(吐槽Qt creator)