PyQT5自定义QGraphicsItem按网格背景拖动

自定义的QGraphicsItem按网格背景拖动

    def itemChange(self, change, value):
        if change == QGraphicsItem.ItemPositionChange:
            newPos = value
            if QApplication.mouseButtons() == Qt.LeftButton:
                xV = round(newPos.x() / 20) * 20   #20为网格大小
                yV = round(newPos.y() / 20) * 20
                return QPointF(xV, yV)
        return value

对于ItemGroup只需要重写一下QGraphicsItemGroup中的ItemChange函数就好。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
PyQt5中,`QGraphicsItem`是一个基础类,它是所有图形元素如形状、图像、文本等在`QGraphicsScene`中绘制的核心组件。如果你想要创建自定义图形元素,可以继承`QGraphicsItem`。 继承`QGraphicsItem`的过程通常包括以下几个步骤: 1. **继承**:首先创建一个新的类,例如`MyCustomShape`,它会继承自`QGraphicsItem`。你可以添加额外的数据成员(属性)和方法来满足你的需求。 ```python from PyQt5.QtWidgets import QGraphicsItem class MyCustomShape(QGraphicsItem): def __init__(self, parent=None): super(MyCustomShape, self).__init__(parent) # 添加初始化代码... ``` 2. **实现必要方法**:`QGraphicsItem`有一些核心方法需要重写,如`boundingRect()`(返回物品的边界矩形)、`paint()`(用于渲染)以及鼠标事件处理等。例如,你可以重写`paint()`来定义你的图形如何绘制: ```python def paint(self, painter, option, widget=None): # 在这里定义绘画逻辑... ``` 3. **重写生命周期方法**:如果需要控制图形的行为,可能会重写一些生命周期方法,比如`mousePressEvent()` 或 `hoverEnterEvent()` 等。 4. **显示实例**:在`QGraphicsScene`中添加你的自定义`QGraphicsItem`实例: ```python scene = QGraphicsScene() custom_shape = MyCustomShape() scene.addItem(custom_shape) ``` 通过这种方式,你可以在不改变原有`QGraphicsItem`功能的基础上,定制出具有独特特性的新图形元素。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值