Qt拖拽简单小demo
拖拽文件到窗口中,读取该文件,并打印出来。
demo.h
#pragma once
#include <QDebug>
#include <QFile>
#include <QTextStream>
#include <QtWidgets/QWidget>
#include <QDrag>
#include <QDragEnterEvent>
#include <QDropEvent>
#include <QMimeData>
#include <QList>
class Demo : public QWidget
{
Q_OBJECT
public:
Demo(QWidget *parent = Q_NULLPTR);
protected:
// 拖的过程的事件
void dragEnterEvent(QDragEnterEvent *a_event);
// 鼠标放下的事件
void dropEvent(QDropEvent *a_event);
};
demo.cpp
#include "demo.h"
Demo::Demo(QWidget *parent) : QWidget(parent)
{
// 设置组件是否允许放置,默认不允许
setAcceptDrops(true);
}
// 拖动的事件
void Demo::dragEnterEvent(QDragEnterEvent* a_event)
{
// 如果拖动的事件中有url,则允许drop
if (a_event->mimeData()->hasUrls())
{
// 如果未调用,则无法drop
a_event->acceptProposedAction();
}
}
// drop事件
void Demo::dropEvent(QDropEvent* a_event)
{
// 获得所有url的列表,拖拽是支持同时拖拽多个文件的
QList<QUrl> urlList = a_event->mimeData()->urls();
QFile file;
for (int i = 0; i < urlList.size(); ++i)
{
// 将url转换为本地的文件名
file.setFileName(urlList[i].toLocalFile());
// 打开文件
if (!file.open(QIODevice::ReadOnly))
{
qDebug() << "open failed";
exit(0);
}
// 读取文件内容
QTextStream stream(&file);
qDebug() << stream.readAll();
file.close();
}
}