自定义 QGraphicsItem 不能正常移动

custom QGraphicsItem not moving properly

我尝试自定义 QGraphicsItem 来制作一个可移动但掉落时会以箱子为中心的棋子物品(模拟跳棋或棋盘)

我一开始就遇到了一个问题,因为我的自定义图形项目不能正确移动,拖动时它会留下痕迹并且对象消失

import sys
from PyQt5.QtWidgets import (QApplication, QWidget, QGridLayout,
                         QGraphicsView, QGraphicsScene, QGraphicsItem)
from PyQt5.QtGui import QPen, QBrush, QTransform
from PyQt5.QtCore import Qt, QRectF, QPointF

class Pawn(QGraphicsItem):
    def __init__(self, parent = None):
        super().__init__(parent)
        self.setFlag(QGraphicsItem.ItemIsMovable)

    def paint(self, painter, options, widget):
        painter.drawEllipse(0, 0, 30, 30)

    def boundingRect(self):
        return QRectF(self.x() - 10, self.y() - 10, 50, 50)


class MainWin(QWidget):
    def __init__(self):
        super().__init__()
        self.initUI()

    def initUI(self):
        scene = QGraphicsScene()
        view = QGraphicsView(scene, self)
        view.setGeometry(0, 0, 290, 290)

        ellipse = scene.addEllipse(200, 200, 20, 20, QPen(Qt.yellow), QBrush(Qt.yellow))
        custom = Pawn()
        scene.addItem(custom)

        ellipse.setFlag(QGraphicsItem.ItemIsMovable)

        self.setWindowTitle('doodling')
        self.setGeometry(200, 200, 300, 300)
        self.show()


if __name__ == '__main__':
    app = QApplication(sys.argv)
    window = MainWin()
    sys.exit(app.exec_())

boundingRect()是一个矩形,用来表示应该绘制的区域,这个区域是相对于item的坐标系,而不是场景的坐标系,所以你不应该使用 x()y(),因为它们是根据场景坐标测量的。

def boundingRect(self):
    return QRectF(-10, -10, 50, 50)

有关详细信息,请参阅 Graphics View Framework