QT 文件拖入只能显示文件路径的问题

一、如何设置文件拖入

        新建一个widget工程

        在widget的构造函数添加       setAcceptDrops(true);

         在widget头文件,类中添加下面函数

protected:
    void dragEnterEvent(QDragEnterEvent *event); // 拖动进入事件
    void dropEvent(QDropEvent *event);           // 放下事件

        然后重写函数功能

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

void aes_tool::dropEvent(QDropEvent *event)
{
    const QMimeData *mimeData = event->mimeData();      // 获取MIME数据
    if(mimeData->hasUrls()){                            // 如果数据中包含URL
        QList<QUrl> urlList = mimeData->urls();         // 获取URL列表
        // 将其中第一个URL表示为本地文件路径
        QString fileName = urlList.at(0).toLocalFile();
        if(!fileName.isEmpty()){                        // 如果文件路径不为空
            QFile file(fileName);     // 建立QFile对象并且以只读方式打开该文件
            qDebug() << "filename: " << fileName;
            if(!file.open(QIODevice::ReadOnly)) return;
            QTextStream in(&file);                      // 建立文本流对象
            ui->inTextEdit->setText(in.readAll());// 将文件中所有内容读入编辑器
        }
    }
}

 然后在源文件上添加需要的头文件

#include <QDragEnterEvent>
#include <QMimeData>
#include <QUrl>
#include <QFile>
#include <QTextStream>

再在ui中添加一些显示控件(这里不一一列举了)。

编译运行,效果如下。 

然后将文件拖入里面,发现只会显示文件名路径,而不是文件内容

在定位问题中发现文件拖入后并没有进入  dragEnterEvent  跟   dropEvent   函数

 最后发现是控件的问题,当前控件是  QTextEdit ,这个控件本身就自带文件拖入的功能,并且实现了自己的拖入函数。

解决办法有两个,一个是不要使用此控件,改换其他。

        另外一个可以在ui界面取消勾选 acceptDrops 。(在QWidget类下面)

另外,不要使用管理员权限运行程序,会导致无法拖入文件的功能,具体原因未知

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值