Qt拖拽简单小demo

Qt拖拽简单小demo

拖拽文件到窗口中,读取该文件,并打印出来。

在这里插入图片描述

demo.h
#pragma once

#include <QDebug>
#include <QFile>
#include <QTextStream>
#include <QtWidgets/QWidget>
#include <QDrag>
#include <QDragEnterEvent>
#include <QDropEvent>
#include <QMimeData>
#include <QList>


class Demo : public QWidget
{
    Q_OBJECT

public:
    Demo(QWidget *parent = Q_NULLPTR);

protected:
    // 拖的过程的事件
    void dragEnterEvent(QDragEnterEvent *a_event);
    
    // 鼠标放下的事件
    void dropEvent(QDropEvent *a_event);

};

demo.cpp
#include "demo.h"

Demo::Demo(QWidget *parent) : QWidget(parent)
{
    // 设置组件是否允许放置,默认不允许
    setAcceptDrops(true);
}


// 拖动的事件
void Demo::dragEnterEvent(QDragEnterEvent* a_event)
{
    // 如果拖动的事件中有url,则允许drop
    if (a_event->mimeData()->hasUrls())
    {
        // 如果未调用,则无法drop
        a_event->acceptProposedAction();
    }
}

// drop事件
void Demo::dropEvent(QDropEvent* a_event)
{
    // 获得所有url的列表,拖拽是支持同时拖拽多个文件的
    QList<QUrl> urlList = a_event->mimeData()->urls();

    QFile file;
	
    for (int i = 0; i < urlList.size(); ++i)
    {
        // 将url转换为本地的文件名
        file.setFileName(urlList[i].toLocalFile());
        
        // 打开文件
		if (!file.open(QIODevice::ReadOnly))
		{
			qDebug() << "open failed";
			exit(0);
		}
        // 读取文件内容
		QTextStream stream(&file);
		qDebug() << stream.readAll();
        file.close();
    }
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值