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

1 介绍

        拖放事件主要用于处理MIME数据,该数据是用于在发送电子邮件时,附加多媒体数据(即拖拽一个文件放入邮件中,事件文件的上传)。Qt拖放事件与拖放操作笔记dragEnterEvent,dropEvent_第1张图片

        Qt拖放事件与拖放操作笔记dragEnterEvent,dropEvent_第2张图片 

 2 示例

        a)使用简化步骤声明拖放事件成员函数:

Qt拖放事件与拖放操作笔记dragEnterEvent,dropEvent_第3张图片

Qt拖放事件与拖放操作笔记dragEnterEvent,dropEvent_第4张图片

Qt拖放事件与拖放操作笔记dragEnterEvent,dropEvent_第5张图片

Qt拖放事件与拖放操作笔记dragEnterEvent,dropEvent_第6张图片

 

         b)拖放事件成员函数定义,QWidget构造函数定义:

         widget.cpp:

#include "widget.h"
#include "ui_widget.h"
#include 
#include 

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

}

Qt拖放事件与拖放操作笔记dragEnterEvent,dropEvent_第7张图片

 

 

 

 

你可能感兴趣的:(c++qt,笔记,qt,c++)