一、主要步骤:开启属性、重写两个方法
this->setAcceptDrops(true);
protected:
void dragEnterEvent(QDragEnterEvent *event);
void dropEvent(QDropEvent *event);
二、示例代码
//MainWindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
protected:
void dragEnterEvent(QDragEnterEvent *event);
void dropEvent(QDropEvent *event);
private:
void setupView();
private:
Ui::MainWindow *ui;
};
#endif // MAINWINDOW_H
//MainWindow.cpp
#include "MainWindow.h"
#include "ui_MainWindow.h"
#include <QDragEnterEvent>
#include <QMimeData>
#include <QDropEvent>
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
setupView();
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::dragEnterEvent(QDragEnterEvent *event)
{
event->acceptProposedAction();
//可以指定过滤类型,一般用于自定义类型
// if (event->mimeData()->hasFormat("text/uri-list")){
// event->acceptProposedAction();
// }
}
void MainWindow::dropEvent(QDropEvent *event)
{
//QList<QUrl> urls = event->mimeData()->urls(); // 结果 多个文件
//QString url = event->mimeData()->urls().first().toString(); // 结果 "file:///C:/User/test/Desktop/a.png"
//QString url = event->mimeData()->urls().at(0).toLocalFile(); // 结果 "C:/User/test/Desktop/a.png"
QString url = event->mimeData()->urls().first().toLocalFile(); // 结果 "C:/User/test/Desktop/a.png"
if (url.isEmpty()){
return;
}
//
//具体将拿到的数据进行处理
QImage img;
img.load(url);
ui->labelImg->setPixmap(QPixmap::fromImage(img));
}
void MainWindow::setupView()
{
this->setAcceptDrops(true); //可以指定控件
}
三、效果图