1.在mainwindow.h文件中添加函数声明:
protected:
void dragEnterEvent(QDragEnterEvent *event) override; // 拖动进入事件
void dropEvent(QDropEvent *event) override; // 放下事件
2.在mainwindow.cpp文件中对两个事件处理函数进行定义:
void MainWindow::dragEnterEvent(QDragEnterEvent *event) // 拖动进入事件
{
if(event->mimeData()->hasUrls()) // 数据中是否包含URL
event->acceptProposedAction(); // 如果是则接收动作
else event->ignore(); // 否则忽略该事件
}
void MainWindow::dropEvent(QDropEvent *event) // 放下事件
{
const QMimeData *mimeData = event->mimeData(); // 获取MIME数据
if(mimeData->hasUrls()){ // 如果数据中包含URL
QList<QUrl> urlList = mimeData->urls(); // 获取URL列表
// 将其中第一个URL表示为本地文件路径
QString fileName = urlList.at(0).toLocalFile();
if(!fileName.isEmpty()){ // 如果文件路径不为空
QFile file(fileName); // 建立QFile对象并且以只读方式打开该文件
if(!file.open(QIODevice::ReadOnly)) return;
QTextStream in(&file); // 建立文本流对象
ui.plainTextEdit->setPlainText(in.readAll()); // 将文件中所有内容读入编辑器
}
}
}
3.进入mainwindow.cpp文件,在构造函数中添加一行代码:
setAcceptDrops(true);// 这样主窗口就可以接收放下事件了