Qt拖放事件与拖放操作笔记dragEnterEvent,dropEvent

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();

}

 

 

 

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值