qt c++用QGraphicsItem实现图形只沿着x轴正负方向拖动
时间: 2023-12-30 16:01:50 浏览: 70
QGraphicsView架构实现基本图形的绘制
5星 · 资源好评率100%
可以通过重写 `QGraphicsItem` 的 `mouseMoveEvent` 方法来实现只沿着x轴正负方向拖动图形的功能。下面是一个简单的示例代码:
```cpp
class MyItem : public QGraphicsItem
{
public:
QRectF boundingRect() const override { return QRectF(-10, -10, 20, 20); }
void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) override
{
painter->drawRect(-10, -10, 20, 20);
}
protected:
void mouseMoveEvent(QGraphicsSceneMouseEvent *event) override
{
QPointF pos = event->pos();
QPointF lastPos = event->lastPos();
QPointF delta = pos - lastPos;
QPointF newPos = pos;
newPos.setY(y());
setPos(mapToParent(newPos - pos));
}
};
```
在这个示例代码中,我们重写了 `QGraphicsItem` 的 `mouseMoveEvent` 方法,在该方法中,我们获取鼠标移动的差值 `delta`,然后将 `delta` 应用到当前位置 `pos` 上,然后计算新的位置 `newPos`,并将其设置为图形的位置。在计算新位置时,我们只让y坐标等于当前的y坐标,这样就实现了只沿着x轴正负方向拖动的功能。
阅读全文