向QGraphicsScene添加QGraphicsItem时触发Segmentation fault错误求助
QGraphicsItem添加到QGraphicsScene触发段错误的解决办法
问题根源
QGraphicsItem是Qt的抽象基类,必须强制实现**boundingRect()和paint()**两个纯虚函数。你的代码仅继承了类但未实现这两个方法,Qt内部处理Item时会调用这些未定义的函数,直接引发内存访问错误(段错误)。
修复代码
from PySide2.QtWidgets import QGraphicsScene, QGraphicsItem from PySide2.QtGui import QPainter, QColor from PySide2.QtCore import QRectF, Qt class Test(QGraphicsItem): def __init__(self): super().__init__(parent=None) # 必须实现:返回Item的边界范围,用于Qt的布局、碰撞检测 def boundingRect(self): return QRectF(0, 0, 100, 100) # 可根据需求调整尺寸 # 必须实现:负责绘制Item的内容 def paint(self, painter, option, widget): # 示例:绘制一个蓝色填充的矩形,可自定义绘制逻辑 painter.setBrush(QColor(0, 0, 255)) painter.drawRect(self.boundingRect()) scene = QGraphicsScene() scene.addItem(Test())
额外提示
- 如果不需要完全自定义Item,可直接继承
QGraphicsRectItem、QGraphicsEllipseItem等Qt提供的预实现子类,这些类已封装了boundingRect()和paint()方法,能快速规避此类问题。 - 纯虚函数是抽象类强制要求子类实现的接口,忽略此类要求会直接触发底层内存错误,这是Qt框架的核心规则之一。
内容的提问来源于stack exchange,提问作者Alma
相关产品推荐
相关产品推荐

