拖放一个文件进入窗口将触发拖放事件
每一个 QWidget 对象都能够处理拖放事件
拖放事件的处理函数为
- void dragEnterEvent(QDragEnterEvent* e);
- void dropEvent(QDropEvent* e);
拖放事件中的 QmimeData
QmimeData 是 Qt 中的多媒体数据类
拖放事件通过 QmimeData 对象传递数据
QmimeData 支持多种不同类型的多媒体数据
常用 MIME 类型数据处理函数
自定义拖放事件的步骤
1. 对接收拖放事件的对象调用 setAcceptDrops 成员函数
2. 重写 dragEnterEvent 函数并判断 MIME 类型
- 期望数据:e->acceptProposedAction();
- 其他数据:e->ignore();
3. 重写 dropEvent 函数并判断 MIME 类型
- 期望数据:从事件对象中获取 MIME 对象并处理
- 其他数据:e->ignore();
拖放事件初探
Widget.h
class Widget : public QWidget
{
Q_OBJECT
public:
Widget(QWidget* parent = nullptr);
void dragEnterEvent(QDragEnterEvent* event);
void dropEvent(QDropEvent* event);
~Widget();
};
Widget.cpp
Widget::Widget(QWidget* parent)
: QWidget(parent)
{
setAcceptDrops(true);
}
void Widget::dragEnterEvent(QDragEnterEvent* event)
{
if(event->mimeData()->hasUrls())
{
event->acceptProposedAction();
}
else
{
event->ignore();
}
}
void Widget::dropEvent(QDropEvent *event)
{
if(event->mimeData()->hasUrls())
{
QList<QUrl> list = event->mimeData()->urls();
for(int i = 0; i < list.count(); i++)
{
qDebug() << list[i].toLocalFile();
}
}
else
{
event->ignore();
}
}
Widget::~Widget()
{
}