#include "MyDragWidget.h"
#include "ui_MyDragWidget.h"
#include <QMouseEvent>
#include <QDragEnterEvent>
#include <QDebug>
#include <QLabel>
#include <QMimeData>
#include <QDrag>
#include <QPainter>
MyDragWidget::MyDragWidget(QWidget *parent) :
QWidget(parent),
ui(new Ui::MyDragWidget)
{
ui->setupUi(this);
//setMinimumSize(200, 200);
setAcceptDrops(true);///允许拖动事件
///创建4个lable存放图片
QLabel* lable1 = new QLabel(this);
lable1->setPixmap(QPixmap(":png/1.png"));
lable1->move(0,0);///放在指定位置
QLabel* lable12 = new QLabel(this);
lable12->setPixmap(QPixmap(":png/01.png"));
lable12->move(100,0);
QLabel* lable13 = new QLabel(this);
lable13->setPixmap(QPixmap(":png/12.png"));
lable13->move(100,100);
QLabel* lable14 = new QLabel(this);
lable14->setPixmap(QPixmap(":png/13.png"));
lable14->move(100,100);
}
void MyDragWidget::setName(QString name)
{
m_name = name;
}
MyDragWidget::~MyDragWidget()
{
delete ui;
}
void MyDragWidget::dragEnterEvent(QDragEnterEvent *event)
{
qDebug()<<"4"<<m_name;
if (event->mimeData()->hasFormat("application/x-dnditemdata"))
{
if (event->source() == this)
{
event->setDropAction(Qt::MoveAction);
event->accept();
}
else
{
event->acceptProposedAction();
}
}
else
{
event->ignore();
}
}
void MyDragWidget::dragMoveEvent(QDragMoveEvent *event)
{
qDebug()<<"3"<<m_name;
if (event->mimeData()->hasFormat("application/x-dnditemdata"))
{
if (event->source() == this)
{
event->setDropAction(Qt::MoveAction);
event->accept();
} else
{
event->acceptProposedAction();
}
}
else
{
event->ignore();
}
}
void MyDragWidget::dropEvent(QDropEvent *event)///落下创建Qlabel
{
qDebug()<<"2"<<m_name;
if (event->mimeData()->hasFormat("application/x-dnditemdata"))
{
QByteArray itemData = event->mimeData()->data("application/x-dnditemdata");
QDataStream dataStream(&itemData, QIODevice::ReadOnly);
QPixmap pixmap;
QPoint offset;
dataStream >> pixmap >> offset;
QLabel *newIcon = new QLabel(this);
newIcon->setPixmap(pixmap);
newIcon->move(event->pos() - offset);
newIcon->show();
newIcon->setAttribute(Qt::WA_DeleteOnClose);
if (event->source() == this)
{
event->setDropAction(Qt::MoveAction);
event->accept();
}
else
{
event->acceptProposedAction();
}
}
else
{
event->ignore();
}
}
//! [1]
void MyDragWidget::mousePressEvent(QMouseEvent *event)
{
qDebug()<<"1"<<m_name;
QLabel *child = static_cast<QLabel*>(childAt(event->pos()));///获取带你给前点击的子控件 Qlabel
if (!child)
return;
QPixmap pixmap = *child->pixmap(); ///图像处理类
QByteArray itemData;
QDataStream dataStream(&itemData, QIODevice::WriteOnly);
dataStream << pixmap << QPoint(event->pos() - child->pos());///添加光标位置、和鼠标位置
//! [1]
//! [2]
QMimeData *mimeData = new QMimeData;
mimeData->setData("application/x-dnditemdata", itemData);
//! [2]
//! [3]
QDrag *drag = new QDrag(this); ///鼠标拖拽事件
drag->setMimeData(mimeData); ///设置选择节点信息等
drag->setPixmap(pixmap); ///设置鼠标移动时的样式
drag->setHotSpot(event->pos() - child->pos());
//! [3]
QPixmap tempPixmap = pixmap;
QPainter painter;
painter.begin(&tempPixmap);
painter.fillRect(pixmap.rect(), QColor(127, 127, 127, 127));
painter.end();
child->setPixmap(tempPixmap);
if (drag->exec(Qt::CopyAction | Qt::MoveAction, Qt::CopyAction) == Qt::MoveAction)
{
child->close();
}
else
{
child->show();
child->setPixmap(pixmap);
}
}
QT鼠标拖拽的实现及源码
需积分: 5 139 浏览量
2023-04-06
09:40:52
上传
评论
收藏 23KB RAR 举报
从程序员成功考公
- 粉丝: 16
- 资源: 4
最新资源
- 毕业设计项目源码-使用Matlab基于PSO工具箱的函数寻优算法实现.zip
- libusb源码,libusb是一个跨平台的用户空间USB库
- 独栋别墅图纸CAD图纸D025-两层-10.72&06.36米-施工图.dwg
- 甄嬛传后宫大合影(闲的没事....)
- SAP GUI for Windows 8.00 patch 7 64Bit
- 毕业设计项目源码-使用Matlab基于动态粒子群算法的动态环境寻优算法.zip
- 华为云会议安装包适配华为擎云L410 -1060 ARM架构
- 清空redis缓存脚本指令
- Keithley6517静电计测试软件,支持24通道切换,DAQ高速采集
- STM8S微控制器-寄存器操作指南
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈