主要实现了文件拖动到编辑框,当鼠标松开的时候获取文件全路径。
通过重写拖动事件,来实现文件的获取。
需要注意的是记得开启拖动事件和启动放下操作:ui->textEdit->viewport()->installEventFilter(this); setAcceptDrops(true); ui->textEdit->setAcceptDrops(true);
Qt QDropEvent文件拖动目录
本文作者原创,转载请附上文章出处与本文链接。
1 .h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <QMessageBox>
#include <QList>
#include <QDebug>
#include <QDropEvent>
#include <QMimeData>
///鼠标事件
#include <QMouseEvent>
#pragma execution_character_set("utf-8")
QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow(QWidget *parent = nullptr);
~MainWindow();
QString m_filePath; //保存文件路径
private slots:
void on_pushButton_clicked();
private:
Ui::MainWindow *ui;
void dropEvent(QDropEvent *event);
};
#endif // MAINWINDOW_H
2 .cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
ui->label->setStyleSheet("#label{border:2px solid rgb(45,226,42);"
"border-top-left-radius: 5px;border-top-right-radius: 0px;border-bottom-right-radius: 0px;border-bottom-left-radius: 5px;}");
//主界面拖动
ui->textEdit->viewport()->installEventFilter(this);
setAcceptDrops(true); //必须设置,不然无法接收拖放事件
ui->textEdit->setAcceptDrops(true); //禁用textEdit控件的放下操作
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::on_pushButton_clicked()
{
}
void MainWindow::dropEvent(QDropEvent *event) //释放对方时,执行的操作
{
int i = 0;
//这里可能有多个,例子中默认只有一个,可以根据需要获取指定的路径
QList<QUrl> urlsList = event->mimeData()->urls();
QMutableListIterator<QUrl>url_file(urlsList); //创建读写器
if(urlsList.size() >=4)
{
QMessageBox::information(this,"多文件传输提示","最多输入三个文件名");
return;
}
if(urlsList.isEmpty())
return;
//遍历URL的同时删除路径前缀
for(url_file.toFront(); url_file.hasNext();)
{
m_filePath = url_file.next().toString();
m_filePath = m_filePath.mid(8);
i++;
}
ui->textEdit->insertPlainText(tr("加载 %1 文件成功... \n").arg(m_filePath));
}