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