#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <QTextEdit>
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow(QWidget *parent = nullptr);
~MainWindow();
protected:
void dragEnterEvent(QDragEnterEvent *event);//拖动进入事件
void dropEvent(QDropEvent * event);//放下事件
private:
QTextEdit *text_edit_;
};
#endif // MAINWINDOW_H
#include "mainwindow.h"
#include <QDragEnterEvent>
#include <QUrl>
#include <QFile>
#include <QTextStream>
#include <QMimeData>
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
{
resize(600,600);
text_edit_ = new QTextEdit(this);
text_edit_->setFixedSize(200,200);
setAcceptDrops(true);//允许主窗口接收放下事件
}
MainWindow::~MainWindow()
{
}
void MainWindow::dragEnterEvent(QDragEnterEvent *event)
{ //拖入的文本文件实际上就是拖入了它的路径
if(event->mimeData()->hasUrls()){//数据中是否包含URL
event->acceptProposedAction();//如果是则接收动作
}else{
event->ignore();//否则忽略该事件
}
}
void MainWindow::dropEvent(QDropEvent *event)
{
const QMimeData *mime_date = event->mimeData();//获取MIME数据
if(mime_date->hasUrls()){//如果数据中包含URL
QList<QUrl> url_list = mime_date->urls();//获取UL列表
//将其中第一个UL表示为本地文件路径
QString file_name = url_list.at(0).toLocalFile();
if(!file_name.isEmpty()){//如果文件路径不为空
QFile file(file_name);//建立QFile对象并且以只读方式打开该文件
if(!file.open(QIODevice::ReadOnly)){
return;
}
QTextStream in(&file);//建立文本流对象
text_edit_->setText(in.readAll());//将文件中所有内容读入编辑器
}
}
}