Qt中Qlabel接受图片拖放
1. 先在ui框中放入label控件,并调至合适大小:
暂时就命名为:label
2. 代码中头文件应包含:
#include <QUrl>
#include <QList>
#include <QtGui/QPixmap>
#include <QtGui/QDragEnterEvent>
#include <QtGui/QDropEvent>
#include <QImage>
#include <QMimeData>
3. 实现代码:
bool MainWindow::eventFilter(QObject *watched, QEvent *event)
{
if(watched == ui->label)
{
if(event->type() == QEvent::DragEnter){
// when monse is in label, label waitting drop is true
QDragEnterEvent *dee = dynamic_cast<QDragEnterEvent*>(event);
dee->acceptProposedAction();
return true;
}else if(event->type() == QEvent::Drop)
{
// when the Drop is occurred, label gets its event
QDropEvent *de = dynamic_cast<QDropEvent*>(event);
QList<QUrl> urls = de->mimeData()->urls();
if (urls.isEmpty())
{
return true;
}
QString path = urls.first().toLocalFile();
QImage image(path);
// QImage is optimized in I/O
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);
}
4. 即可实现拖放显示