文件拖拽到窗口

文件拖拽到窗口

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

  • 设置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);
}
  • 拖拽完成后:
    这里写图片描述
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值