在QGraphicsView中拖动QGraphicsWidget

如果你的QGraphicsWidget、QGraphicsItem无法相应鼠标、键盘消息,请参考《QGraphicsWidget收不到鼠标、键盘消息解决

两种方法

方法1:

先通过下面的代码设置被拖动想的属性:

setFlags(QGraphicsItem::ItemIsMovable | QGraphicsItem::ItemIsSelectable | QGraphicsItem::ItemIsFocusable | QGraphicsItem::ItemSendsGeometryChanges | QGraphicsItem::ItemUsesExtendedStyleOption);

如果你的视图是继承自QGraphicsView,则在重载鼠标移动事件时,基类QGraphicsView的鼠标移动事件请不要屏蔽,否则不能移动项,如下:

void GraphicsView::mouseMoveEvent(QMouseEvent *event)
{
    // 这里根据业务写你需要的代码

    QGraphicsView::mouseMoveEvent(event);  // 这句不能漏掉,否则项不能移动
}

即上面的QGraphicsView::mouseMoveEvent(event); 这句不能漏掉,否则项不能移动。

方法2:

重写鼠标事件

继承QGraphicsItem,重写mousePressEvent、mouseMoveEvent和mouseReleaseEvent三个函数。

void BreakerItem::mousePressEvent( QGraphicsSceneMouseEvent* event )
{
	m_mousePressed=true;
	m_mousePressedPoint=this->scenePos()-event->scenePos();
}

void BreakerItem::mouseMoveEvent( QGraphicsSceneMouseEvent* event )
{
	if(m_mousePressed==true)
	{
		this->setPos(event->scenePos()+m_mousePressedPoint);
	}
} void BreakerItem::mouseReleaseEvent( QGraphicsSceneMouseEvent* event )
{
	m_mousePressed=false;
}

方法2没有亲自测试过,从网上找的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值