拖拽:drag drop

#include<QDropEvent>

拖拽功能跟鼠标点击时间很类似,但是多了数据拷贝,功能许可的要求;

实现拖拽功能时,基本用到的重写函数为:根据控件要求选择性重写函数

   void mousePressEvent(QMouseEvent *event);//鼠标点击时触发

 void dragEnterEvent(QDragEnterEvent *event);//拖进目标控件时触发

 void dragLeaveEvent(QDragLeaveEvent *event);//离开接收控件时触发,(进去不放,又拖出来)

    void dragMoveEvent(QDragMoveEvent *event);//在接收控件内拖着移动

    void dropEvent(QDropEvent *event);//松开鼠标时触发

在接收的控件里我们需要允许该控件接收信息,所以要在构造函数里setAcceptDrag(true);允许放下信息;

实现的基本思路:函数里有event指针参数,所以当触发点击事件时,点击位置的信息保存在该指针里,在放下的地方,把指针里带的数据在释放出来;当然,无论哪个函数都需要许可,event->accept()允许拖拽,所以,我们可以通过判断鼠标event所携带的数据来选择性执行不同的操作;

重点在数据的拷贝和释放;在mousePressEvent中拷贝,在dropEvent中释放(根据鼠标中携带的数据改变目标点的数据);

以图片为例:url,按钮......都可以作为信息

QLabel*p=static_cast<QLabel*>(childAt(event->pos()))

获取点击位置的控件label,转换为可操作的标签label;

QPixmap pix=*p->pixmap();

获取点击控件的属性,数据,并记录,(此处是图片)

QByteArray arr;

QDataStream data(&arr,QIoDevice::WriteOnly);

data<<pix<<QPoint(event->pos()-p->pos());写入

data>>pix>>QPoint(event->pos()-p->pos());读出

QMimeData*min=new QMimeData();

min->setData("图片",arr);

QDrag *drag=new QDrag(this);

drag->setMimeData(min);

drag->setPixmap(pixmap)//拖动过程中显示的样式(图片)

drag->setHotSpot(event->pos()-p->pos())鼠标位置

drag->exec();执行拖动


   


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值