PyQt5自定义文件浏览器二次打开后随机崩溃问题求助
PyQt5自定义按需加载文件浏览器二次打开崩溃问题解决
问题背景
为满足完全自定义需求,基于QTreeView、QStandardItemModel和QStandardItem实现了按需加载目录的文件浏览器(未使用QFileSystemModel)。首次打开包含该浏览器的工具窗口时功能正常,但二次打开后,展开若干目录项会随机触发崩溃,退出代码为-1073740791 (0xC0000409)。
崩溃定位
经排查,崩溃触发点在add_subdirectories方法的item.appendRows(items)代码行,底层抛出异常:
RuntimeError: wrapped C/C++ object of type QStandardItem has been deleted
该文件浏览器嵌入在主应用的二级QMainWindow的QFrame容器中。
无效尝试
已尝试以下方案但未解决问题:
- 子类化QStandardItemModel和QStandardItem
- 在关键代码处捕获异常
- 对模型索引进行有效性验证
最终解决方法
通过以下三处修改彻底解决崩溃问题:
- 移除独立的
wOpen函数,将工具窗口的创建与显示逻辑直接移至按钮点击的槽函数中 - 在主窗口MainWindow类中添加属性,用于存储工具窗口的引用,避免窗口对象被Python垃圾回收机制意外回收
- 将TrashButton组件中原来的
destroy和close调用替换为deleteLater()方法,确保Qt C++对象按框架规定的生命周期流程销毁
内容的提问来源于stack exchange,提问作者MRCSTD
相关产品推荐
相关产品推荐

