Qt 拖放 - 自定义类型数据(3)

本文介绍了在Qt中如何实现拖放功能,涉及QDrag、QMimeData和QWidget的使用。通过setData()函数设置自定义MIME类型数据,并在dragEnterEvent和dropEvent中处理接收数据。同时讨论了子类化QMimeData以存储和处理不同类型的数据。

1 前言

Qt 的拖放数据是指在一个应用程序中拖动一个对象并将其放置到同一个应用程序或另一个应用程序中的目标部件上。一般情况下,拖放可分为四个阶段:拖起(dragging)、进入(entering)、移动(moving)和释放(releasing),涉及到的类主要有 QDrag、QMimeData 和 QWidget。在 Qt 中,支持多种方法实现数据的拖放操作,其中最常用的方式是自定义 MIME 类型以及通过实现鼠标事件函数进行控制。

2 效果

在这里插入图片描述

3 使用setData()函数

  1. 在mousePressEvent函数里准备并设置数据(也可以在mouseMoveEvent里)
void DragDropButton::mousePressEvent(QMouseEvent *event)
{
   
   
    Q_UNUSED(event)
    QDrag *drag = new QDrag(this);
    QMimeData *mimeData = new QMimeData;
    QIcon icon("../ColorBridge.jpg");
    QString text("CCC");
    QByteArray data;
    // 使用数据流把数据 icon 和 text 写入 data 中
    QDataStream in(&data, QIODevice::WriteOnly);
    in << icon << text;
    // 设置自定义的 MIME 类型数据,其中"MyData"为自定义的 MIME 类型
    mimeData->setData("MyData", data);
    drag->setMimeData(mimeData);
    drag->exec(Qt::CopyAction); // 启动拖放操作
}
  1. 指示目标部件可以接受操作类型
void DragDropButton::dragEnterEvent(QDragEnterEvent *event)
{
   
   
    // 指示目标部件可以接受操作类型,并将该操作类型设置为建议的操作类型。
    event->acceptProposedAction();
    /* 注:目标部件仅能在 dragEnterEvent() 和 dragMoveEvent() 函数中对建议操作类型进行决策,
     *     并且必须在 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值