参考大神博客:
以下内容就是直接参考上面大神博客:
实现步骤,首先加上头文件:
#include <QMainWindow>
#include <QMouseEvent>
其次在在h文件中:
private:
bool eventFilter(QObject *watched, QEvent *event);
在.cpp文件中:
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QDebug>
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
ui->optional_rsaBtn->isCheckable();
ui->label->installEventFilter(this);
ui->label->setAcceptDrops(true);
}
MainWindow::~MainWindow()
{
delete ui;
}
bool MainWindow::eventFilter(QObject *watched, QEvent *event)
{
if (watched == ui->label)
{
if (event->type() == QEvent::DragEnter)
{
// [[2]]: 当拖放时鼠标进入label时, label接受拖放的动作
QDragEnterEvent *dee = dynamic_cast<QDragEnterEvent *>(event);
dee->acceptProposedAction();
return true;
}
else if (event->type() == QEvent::Drop)
{
// [[3]]: 当放操作发生后, 取得拖放的数据
QDropEvent *de = dynamic_cast<QDropEvent *>(event);
QList<QUrl> urls = de->mimeData()->urls();
if (urls.isEmpty())
{
return true;
}
QString path = urls.first().toLocalFile();
// [[4]]: 在label上显示拖放的图片
QImage image(path);
// QImage对I/O优化过, QPixmap对显示优化
if (!image.isNull())
{
image = image.scaled(ui->label->size(),
Qt::KeepAspectRatio,
Qt::SmoothTransformation);
ui->label->setPixmap(QPixmap::fromImage(image));
}
return true;
}
}
return QWidget::eventFilter(watched, event);
}
随便从桌面上拖动一个图标就可以直接拖动到label中,如下显示: