#pragma once
#include <QtWidgets/Qwidget>
#include <QLineEdit>
#include <QDropEvent>
#include <QMimeData>
#include <QDragEnterEvent>
class CustomLineEdit : public QLineEdit
{
Q_OBJECT
public:
CustomLineEdit(QWidget *parent = nullptr);
~CustomLineEdit();
protected:
///< 拖动文件到窗口 触发
void dragEnterEvent(QDragEnterEvent *event);
///< 拖动文件到窗口移动文件 触发
void dragMoveEvent(QDragMoveEvent *event);
///< 拖动文件到窗口释放文件触发
void dropEvent(QDropEvent *event);
};
#include "CustomLineEdit.h"
CustomLineEdit::CustomLineEdit(QWidget *parent) : QLineEdit(parent)
{
setAcceptDrops(true);
}
CustomLineEdit::~CustomLineEdit()
{
}
void CustomLineEdit::dragEnterEvent(QDragEnterEvent *event)
{
if (event->mimeData()->hasUrls())
event->acceptProposedAction(); //事件数据中存在路径,方向事件
else
event->ignore();
}
void CustomLineEdit::dragMoveEvent(QDragMoveEvent *event)
{
}
void CustomLineEdit::dropEvent(QDropEvent *event)
{
const QMimeData *mimeData = event->mimeData();
if (mimeData->hasUrls())
{
QList<QUrl> urls = mimeData->urls();
QString fileName = urls.at(0).toLocalFile();
setText(fileName);
event->accept();
}
else
{
event->ignore();
}
}
运行结果: