QT实现头像图片剪切框

在QT项目中,为了实现用户自定义头像裁剪,文章详细介绍了如何创建响应用户缩放的边框,包括重写鼠标事件以实现边框拖动和自由缩放,以及使用阴影效果来突出裁剪区域。通过缩放边框的实现、阴影的绘制,最终实现了类似QQ的图片裁剪功能。文章提供了关键代码片段和最终实现效果。
摘要由CSDN通过智能技术生成


近期在做一个qt项目,在用户选择头像图片后,需要将图片载入,并对其进行用户自定义裁剪。通过研究参照各流行软件的裁剪方式后,发现qq实现的裁剪比较好看,于是,我想那就做一个和qq相似的吧。先放一张qq实现的效果,然后最后再放我实现的效果。




1. 怎样去实现裁剪

对于一张载入的图片,要实现用户自定义裁剪,那么首先我需要有一个能够响应用户自由缩放的边框,当用户缩放到心仪大小,再摆到适当位置,我能知道框的位置及长宽,那么获取框里面的图片就很简单了。另外,我需要阴影,只有在框里面的图像部分是正常的,其他部分均被阴影覆盖。于是,实现该功能,大致需要两件东西,框及阴影。

框的实现可以定义无边框的窗口,如widgetframe,当一个窗口被定义为无边框时,那么该窗口势必无法再响应鼠标的拖动事件,也就是该边框将不能移动,也不能缩放,因此,我们需要重写鼠标事件,实现边框的拖动,以及自由缩放。

阴影的实现可以使用黑色的画笔,并设置透明度,去填充边框之外的区域。

 

2. 缩放边框的实现

要想缩放边框实现拖动及自由缩放,那么需要重写该边框的mousePressEvent、mouseMoveEvent、mouseReleaseEvent三个事件。具体见如下代码

2.1对mousePressEvent的重写

m_startPoint 用户记录鼠标点击下的事件,  而后期只需要算出移动时鼠标的坐标与初始坐标的差值,进行移动即可。代码如下:

void CutDialog::mousePressEvent(QMouseEvent * event)
{
	m_startPoin
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值