Qt 拖拽圖片到QLabel上並顯示
阿新 • • 發佈:2018-12-17
實現程式碼:
#include "mainwindow.h" #include "ui_mainwindow.h" #include <QDragEnterEvent> #include <QDropEvent> #include <QUrl> #include <QList> #include <QMimeData> MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) { ui->setupUi(this); 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 QMainWindow::eventFilter(watched, event); }
執行效果: