1 介绍
拖放事件主要用于处理MIME数据,该数据是用于在发送电子邮件时,附加多媒体数据(即拖拽一个文件放入邮件中,事件文件的上传)。
2 示例
a)使用简化步骤声明拖放事件成员函数:
b)拖放事件成员函数定义,QWidget构造函数定义:
widget.cpp:
#include "widget.h"
#include "ui_widget.h"
#include <QMimeData>
#include <QFileInfo>
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
setAcceptDrops(true);
ui->plainTextEdit->setAcceptDrops(false);
ui->label->setAcceptDrops(false);
ui->label->setScaledContents(true);
}
Widget::~Widget()
{
delete ui;
}
void Widget::resizeEvent(QResizeEvent *event)
{
//这里为实现拖拽图片后的label尺寸自适应变化,采用编码实现size变化
QSize sz = ui->plainTextEdit->size();
ui->plainTextEdit->move(5, 5);
ui->label->move(5, sz.height() + 10);
ui->plainTextEdit->resize(this->width() - 10, sz.height()); //设置ptEdit的宽度为widget宽度,保留原本高度
ui->label->resize(this->width() - 10,this->height() - sz.height() - 20);
event->accept(); //事件完成后的停止机制函数
}
void Widget::dragEnterEvent(QDragEnterEvent *event)
{
ui->plainTextEdit->clear(); //清空现有内容
ui->plainTextEdit->appendPlainText("dragEnterEvent事件处理中:");
for(auto &item:event->mimeData()->formats())
ui->plainTextEdit->appendPlainText(item);
for(auto &item:event->mimeData()->urls())
ui->plainTextEdit->appendPlainText(item.toString());
if(event->mimeData()->hasUrls())
{
QString fileName = event->mimeData()->urls().at(0).fileName(); //获取文件名
QFileInfo fileInfo(fileName); //读取文件
QString ex = fileInfo.suffix().toUpper(); //获取文件后缀
if(ex=="JPEG") //通过文件后缀来判断是否接受动作
event->acceptProposedAction();
else
event->ignore();
}
else
event->ignore();
}
void Widget::dropEvent(QDropEvent *event)
{
//显示图片
QString filePath = event->mimeData()->urls().at(0).path(); //获取文件名
filePath = filePath.right(filePath.length() - 1); //去掉fileName中的‘/’符号
QPixmap pixMap(filePath);
ui->label->setPixmap(pixMap);
event->accept();
}