qt c++用QGraphicsItem实现图形只沿着x轴方向拖动
时间: 2023-12-29 12:06:37 浏览: 76
可以通过重载 QGraphicsItem 的 `mouseMoveEvent` 函数来实现只沿着 X 轴拖动图形的功能。
下面是一个简单的实现示例:
```cpp
class MyItem : public QGraphicsItem
{
public:
MyItem(QGraphicsItem *parent = nullptr)
: QGraphicsItem(parent)
{
// 设置图形的初始位置和大小
setPos(0, 0);
m_width = 100;
m_height = 100;
}
QRectF boundingRect() const override
{
return QRectF(0, 0, m_width, m_height);
}
void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) override
{
// 绘制图形
painter->drawRect(boundingRect());
}
void mouseMoveEvent(QGraphicsSceneMouseEvent *event) override
{
// 获取当前鼠标位置和上一次鼠标位置之间的差值
QPointF delta = event->pos() - event->lastPos();
// 只允许沿着 X 轴方向移动图形
QPointF newPos = pos() + QPointF(delta.x(), 0);
// 限制图形的移动范围
if (newPos.x() < 0)
newPos.setX(0);
if (newPos.x() + m_width > scene()->width())
newPos.setX(scene()->width() - m_width);
// 更新图形的位置
setPos(newPos);
}
private:
qreal m_width;
qreal m_height;
};
```
在上面的示例中,我们重载了 `mouseMoveEvent` 函数,并在其中实现了只沿着 X 轴方向拖动图形的逻辑。具体来说,当鼠标拖动图形时,我们计算出当前鼠标位置和上一次鼠标位置之间的差值,并将其加到图形的当前位置上,从而实现了图形的移动。同时,我们还限制了图形的移动范围,使其不能超出场景的边界。
阅读全文