栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

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

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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   //添加头文件
#include              //添加头文件

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 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();//支持中文

即可。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/832515.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号