【QT笔记】Qt 文件的拖放 drag - drop

帮朋友写了一个小工具
是将txt文件,里面有很多这种数据,数据为
037 038 064 069 074 079 087 088 112 115 116 120 142 145 146 150 152 155
将数据+1,超过三位数的不予处理,999不予+1。

功能很简单,但是不想进行选文件,嫌费事啊,想把文件拖拽到软件里面。

研究了下Qt的拖拽

鼠标 点击 send widget 时候 会触发mousePressEvent
按压鼠标 移动的过程中 会触发mouseMoveEvent
拖拽鼠标进入窗口 recv widget 会触发 dragEnterEvent
松开鼠标 会触发dropEvent

大家看一个例子,做动txt文本到窗口,如下动图,看qt的输出窗口。拖拽放开打印Drop,来回移动不放开打印DragEnter和DragLeave

在这里插入图片描述

在这里插入图片描述

在.h中,主要这三个函数


protected:
    void dragEnterEvent(QDragEnterEvent *event);

    void dropEvent(QDropEvent *event);

    void dragLeaveEvent(QDragLeaveEvent *event);

.c


void MainWindow::dragEnterEvent(QDragEnterEvent *event)
{
    qDebug() << __FILE__ << __LINE__  << "DragEnter!";
    //如果为文件,则支持拖放
    if (event->mimeData()->hasFormat("text/uri-list"))
    {
        event->acceptProposedAction();
    }
}


void MainWindow::dropEvent(QDropEvent *event)
{
    qDebug() << __FILE__ << __LINE__ << "Drop!";
    //注意:这里如果有多文件存在,意思是用户一下子拖动了多个文件,而不是拖动一个目录
    //如果想读取整个目录,则在不同的操作平台下,自己编写函数实现读取整个目录文件名
    QList<QUrl> urls = event->mimeData()->urls();
    if(urls.isEmpty())
        return;

    //往文本框中追加文件名
    foreach(QUrl url, urls)
    {
        QString m_fileName = url.toLocalFile();
        ui->lineEdit->setText(m_fileName);
    }
}

void MainWindow::dragLeaveEvent(QDragLeaveEvent *event)
{
    qDebug() << __FILE__ << __LINE__  << "Drag Leave";
}

需要设置

    setAcceptDrops(true);   //接受拖拽

在这里插入图片描述

demo的源码:
https://download.csdn.net/download/linbounconstraint/12651508
源码

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值