qt在场景中旋转矩形,鼠标拉伸矩形变形了
时间: 2024-02-19 17:03:08 浏览: 77
你可以通过设置 QGraphicsItem 的旋转和变形来实现在场景中旋转和变形矩形。以下是一个简单的示例代码:
```python
from PyQt5.QtCore import Qt
from PyQt5.QtGui import QTransform
from PyQt5.QtWidgets import QGraphicsRectItem
class MyRectItem(QGraphicsRectItem):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.setFlags(QGraphicsRectItem.ItemIsMovable |
QGraphicsRectItem.ItemIsSelectable |
QGraphicsRectItem.ItemSendsGeometryChanges)
self.setAcceptHoverEvents(True)
self.setTransformOriginPoint(self.boundingRect().center())
def hoverMoveEvent(self, event):
if self.isSelected():
if event.modifiers() == Qt.ShiftModifier:
self.setRotation(self.rotation() + 5)
else:
super().hoverMoveEvent(event)
def itemChange(self, change, value):
if change == QGraphicsRectItem.ItemRotationHasChanged:
self.setTransform(QTransform().rotate(self.rotation()), True)
elif change == QGraphicsRectItem.ItemTransformHasChanged:
self.setRotation(self.transform().rotation())
return super().itemChange(change, value)
```
在这个示例中,我们继承了 QGraphicsRectItem 类,并在其基础上实现了旋转和变形的功能。我们使用 setFlags() 方法设置了可移动、可选中和发送几何变化通知的标志,以便我们可以在场景中拖动和选择矩形。
我们还使用 setAcceptHoverEvents() 方法启用了鼠标悬停事件的处理,以便我们可以在选择矩形的同时进行旋转操作。在 hoverMoveEvent() 方法中,我们检查当前是否按下 Shift 键,如果是,则逆时针旋转矩形 5 度。
在 itemChange() 方法中,我们捕获了矩形的旋转和变形事件,并使用 setTransform() 和 setRotation() 方法进行相应的变换。注意,为了确保矩形的变形和旋转相对于其中心进行,我们使用 setTransformOriginPoint() 方法设置了变换的原点为矩形的中心点。
这样,你就可以在场景中旋转和变形矩形了。
阅读全文