Qt实现widget中从外部拖放入文件

CSDN看到的例子都是针对QMainWindow的,现在来测试一下QWidgets的拖放操作。

一下操作是QT4的,QT5请酌情参考。

首先,新建QT工程,选择QWidget模式:

接下来定义函数,并同时在cpp中实现。注意,如果只声明,不实现,会报错!

下面时实现:

这时候可以编译一下了,没问题通过。如果这里有问题,那么注意检查是不是声明有错误。

这一步证明:MainWindow和Widget同样可以实现dragEnterEvent和dropEvent。

接下来在widget上放置控件:

我只想实现将外部文件拖放如编辑框,所以就专门实现一下这个。

接下来写拖入的回调函数

widget.cpp



#include "widget.h"
#include "ui_widget.h"
#include <QDragEnterEvent>  //添加头文件
#include <QUrl>             //添加头文件

Widget::Widget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Widget)
{
    ui->setupUi(this);
}

Widget::~Widget()
{
    delete ui;
}


// 拖动进入事件
void Widget::dragEnterEvent(QDragEnterEvent *event)
{
    // 数据中是否包含URL,如果是则接收动作,否则忽略该事件
    if(event->mimeData()->hasUrls())
        event->acceptProposedAction();
    else event->ignore();
}

// 放下事件
void Widget::dropEvent(QDropEvent *event)
{
    // 获取MIME数据
    const QMimeData *m = event->mimeData();
    // 如果数据中包含URL
    if(mimeData->hasUrls()){
        // 获取URL列表
        QList<QUrl> urlList = m->urls();
        // 将其中第一个URL表示为本地文件路径
        QString fileName = urlList.at(0).toLocalFile();
        // 如果文件路径不为空
        if(!fileName.isEmpty()){
            //  转为char*
            QByteArray qByteArrary = fileName.toLatin1();
            char* filePath = qByteArrary.data();
            //  判断当前控件是否被鼠标选中
            if(ui->lineEdit->underMouse()){
                ui->lineEdit->setText(filePath);
            }
        }
    }
}

就可以了。下面看一下效果

 拖入文件放入:

大功告成。 

TIPS:貌似不支持中文,将字符串转换改为:

QByteArray qByteArrary = fileName.toAscii();//支持中文

即可。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Intimes

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值