You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PySide6中QModelIndex.internalPointer()调用崩溃,求问题排查

QModelIndex.internalPointer()调用导致PySide6程序崩溃

问题详情

需要通过GUI访问并编辑树形结构的复杂异构数据,使用QTreeView浏览数据结构,选中数据集后打开独立视图编辑。自行继承QAbstractItemModel实现了自定义模型,同时编写了自定义树形项类来访问数据集,QTreeView可正常加载并显示数据结构。但尝试通过模型访问数据集时,调用QModelIndex.internalPointer()会导致程序无异常直接崩溃。调试简化代码后,即使使用QStandardItemModel和QStandardItem,崩溃问题仍然存在。

复现问题的极简代码:

import sys
from PySide6 import QtGui, QtWidgets

app = QtWidgets.QApplication(sys.argv)
tree = QtWidgets.QTreeView()
model = QtGui.QStandardItemModel()
item = QtGui.QStandardItem('item')
model.appendRow(item)
tree.setModel(model)
tree.show()

# 此调用正常
print(item.index().constInternalPointer())

# 此调用导致崩溃
print(item.index().internalPointer())

sys.exit(app.exec())

原因分析

PySide6对Qt的QModelIndex::internalPointer()方法的绑定存在内存管理层面的问题,直接调用该方法会触发非法内存访问,导致程序崩溃。而constInternalPointer()作为其const版本,PySide6的绑定实现处理更安全,不会出现此类问题。

解决方法

  • 直接替换internalPointer()的调用为constInternalPointer(),两者在获取内部指针的功能上完全一致,且后者在PySide6环境下稳定可用。
  • 若使用自定义模型,确保在实现index()方法时,传入的内部指针对象生命周期由Python正确管理(比如避免C++侧对象被提前销毁),同时在Python中操作该指针指向的对象时,遵循PySide6的对象交互规则。

内容的提问来源于stack exchange,提问作者flho

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 15:05:20