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)

 

posted @ 2020-11-09 21:48  补码  阅读(619)  评论(0编辑  收藏  举报