QT:从外部拖拽文件到QWidget中,获取其文件的路径(单文件和多文件)
目录
程序运行实例
实现步骤
1、启用拖放事件
setAcceptDrops(true);
2、重写 dragEnterEvent 和 dropEvent 事件
//拖动进入事件
void Widget::dragEnterEvent(QDragEnterEvent *ev)
{
if(ev->mimeData()->hasUrls())//是否是文件路径
{
ev->accept();//接收拖动进入事件
}
//ev->ignore();//若忽略该事件,则不会发生之后的事件,拖放到此结束
}
//拖动放下事件
void Widget::dropEvent(QDropEvent *ev)
{
if(ev->mimeData()->hasUrls())
{
QList<QUrl> urls = ev->mimeData()->urls();
//单个文件路径
//QString fileName = urls.at(0).toLocalFile();
//qDebug()<<fileName;
//多个文件路径
for(int i=0; i<urls.size(); i++)
{
qDebug()<<urls.at(i).toLocalFile();
}
}
}
完整示例代码
#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
namespace Ui {
class Widget;
}
class Widget : public QWidget
{
Q_OBJECT
public:
explicit Widget(QWidget *parent = 0);
~Widget();
protected:
void dragEnterEvent(QDragEnterEvent* ev) override;
void dropEvent(QDropEvent* ev) override;
private:
Ui::Widget *ui;
};
#endif // WIDGET_H
#include "widget.h"
#include "ui_widget.h"
#include <qdebug.h>
#include <QDragEnterEvent>
#include <QDropEvent>
#include <QMimeData>
#include <QUrl>
Widget::Widget(QWidget *parent) :
QWidget(parent),
ui(new Ui::Widget)
{
ui->setupUi(this);
this->setAcceptDrops(true);
}
Widget::~Widget()
{
delete ui;
}
void Widget::dragEnterEvent(QDragEnterEvent *ev)
{
if(ev->mimeData()->hasUrls())
{
ev->accept();//接收拖动进入事件
}
//ev->ignore();//若忽略该事件,则不会发生之后的事件,拖放到此结束
}
void Widget::dropEvent(QDropEvent *ev)
{
if(ev->mimeData()->hasUrls())
{
QList<QUrl> urls = ev->mimeData()->urls();
for(int i=0; i<urls.size(); i++)
{
qDebug()<<urls.at(i).toLocalFile();
}
}
}