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

向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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 21:10:33