文件拖拽到窗口

来源:互联网 发布:c语言return返回值给谁 编辑:程序博客网 时间:2024/06/03 20:39

文件拖拽到窗口

方法一:重写部件拖拽处理函数

  • 设置UI接受拖拽:
    这里写图片描述

  • 重写:
    .h

#include <QDebug>#include <QEvent>#include <QDropEvent>#include <QMimeData>protected:    void dragEnterEvent(QDragEnterEvent * event);    void dropEvent(QDropEvent * event);

.cpp

void Dialog::dragEnterEvent(QDragEnterEvent * event){    qDebug()<<__FUNCTION__;    event->acceptProposedAction();    //接受拖拽的文件}void Dialog::dropEvent(QDropEvent * event){    qDebug()<<__FUNCTION__;    auto urls = event->mimeData()->urls();    for(auto it = urls.begin();it != urls.end();++it)    //获取拖拽的文件名        qDebug()<<it->toLocalFile();}
  • 结果:
    这里写图片描述
    方法二:使用 eventFilter 设置拖动到控件上
  • 设置控件属性,与方法一一致:
  • 代码:
    .h
    bool eventFilter(QObject *watched, QEvent *event);

.cpp
构造函数:

    ui->comboBox->installEventFilter(this);

eventFilter:

bool Dialog::eventFilter(QObject *watched, QEvent *event){    if(watched == ui->comboBox)                //控件的事件    {        if(event->type() == QEvent::DragEnter)  //拖拽到控件        {            qDebug()<<"QEvent::DragEnter";            ((QDragEnterEvent * )event)->acceptProposedAction();  //接受            return true;        }        else if(event->type() == QEvent::Drop)  //拖拽完成        {            qDebug()<<"QEvent::Drop";            auto urls = ((QDragEnterEvent * )event)->mimeData()->urls();            for(auto it = urls.begin();it != urls.end();++it)    //加到控件里头去            {                qDebug()<<it->toLocalFile();                ui->comboBox->addItem(it->toLocalFile());            }            return true;        }    }    return QDialog::eventFilter(watched,event);}
  • 拖拽完成后:
    这里写图片描述
原创粉丝点击