PyQt5 QObject+QGraphicsItem 多继承导致 QGraphicsItem.setFlags() 崩溃

问题描述

我发现,在继承自 QGraphicsItem QObject 的类中,调用 QGraphicsItem.setFlags() 会导致 PyQt5 中的立即、无错误的崩溃。以下示例演示了这一点

import sys
from PyQt5.QtCore import QObject,QRectF
from PyQt5.QtGui import QColor
from PyQt5.QtWidgets import QGraphicsItem,QGraphicsView,QGraphicsScene,QMainWindow,QApplication


class Item(QObject,QGraphicsItem):
    def __init__(self):
        QObject.__init__(self)
        QGraphicsItem.__init__(self)
        
        self.setFlags(QGraphicsItem.ItemIsSelectable | QGraphicsItem.ItemIsMovable |
                      QGraphicsItem.ItemSendsScenePositionChanges)

    def boundingRect(self) -> QRectF:
        return QRectF(0,50,50)

    def paint(self,painter,option,widget=...) -> None:
        painter.fillRect(self.boundingRect(),QColor('#555555'))


class View(QGraphicsView):
    def __init__(self):
        super().__init__()

        self.resize(400,300)
        scene = QGraphicsScene(self)
        scene.setSceneRect(0,self.width(),self.height())
        self.setScene(scene)

    def mousepressEvent(self,event) -> None:
        QGraphicsView.mousepressEvent(self,event)
        if event.isAccepted():
            return

        newitem = Item()
        self.scene().addItem(newitem)
        newitem.setPos(event.pos())


class ViewWindow(QMainWindow):
    def __init__(self):
        super().__init__()
        self.setCentralWidget(View())


if __name__ == '__main__':
    app = QApplication(sys.argv)
    widget = ViewWindow()
    widget.show()
    app.exec_()

相同的代码pyside2 上运行良好。我错过了什么吗?我使用的是 Python 3.9.5 和 PyQt5 5.15.4。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)