QGraphicsItem不用点击鼠标的鼠标移动事件C++
时间: 2023-07-11 09:04:01 浏览: 95
现QGraphicsItem的鼠标事
如果您想在不使用鼠标点击事件的情况下移动QGraphicsItem,您可以使用QGraphicsItem的mouseMoveEvent()函数。在该函数中,您可以捕获鼠标移动事件,并根据需要更新QGraphicsItem的位置。以下是一个示例:
```cpp
class MyItem : public QGraphicsItem
{
public:
MyItem();
QRectF boundingRect() const override;
void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget = nullptr) override;
void mouseMoveEvent(QGraphicsSceneMouseEvent *event) override;
private:
QPointF m_lastPos;
};
MyItem::MyItem()
{
setFlag(QGraphicsItem::ItemIsMovable, true);
setFlag(QGraphicsItem::ItemIsSelectable, true);
}
QRectF MyItem::boundingRect() const
{
return QRectF(-10, -10, 20, 20);
}
void MyItem::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget)
{
painter->drawEllipse(boundingRect());
}
void MyItem::mouseMoveEvent(QGraphicsSceneMouseEvent *event)
{
QPointF delta = mapToParent(event->pos()) - m_lastPos;
setPos(pos() + delta);
m_lastPos = mapToParent(event->pos());
}
```
在这个例子中,重要的部分是mouseMoveEvent()函数。在这个函数中,我们获取了鼠标移动事件的位置,并计算出鼠标移动的偏移量。然后,我们使用setPos()函数更新QGraphicsItem的位置。注意,我们还使用了mapToParent()函数将鼠标事件的位置转换为父项的坐标系中的位置。最后,我们将m_lastPos设置为当前位置,以便在下一次鼠标移动事件发生时计算偏移量。
阅读全文