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

3 使用setData()函数
- 在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); // 启动拖放操作
}
- 指示目标部件可以接受操作类型
void DragDropButton::dragEnterEvent(QDragEnterEvent *event)
{
// 指示目标部件可以接受操作类型,并将该操作类型设置为建议的操作类型。
event->acceptProposedAction();
/* 注:目标部件仅能在 dragEnterEvent() 和 dragMoveEvent() 函数中对建议操作类型进行决策,
* 并且必须在

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

被折叠的 条评论
为什么被折叠?



