首页 > 其他分享 >QT中实现接收拖拽文件

QT中实现接收拖拽文件

时间:2024-03-19 16:56:38浏览次数:22  
标签:mimeData 接收 QT void 拖拽 xbDropDreaLabel include event

Qt 中实现接收拖拽文件的功能主要涉及到 QDragEnterEvent、QDropEvent 和 QMimeData 等类的使用。

1.启用拖拽支持:

  在 Qt 窗口或控件启用拖拽支持,通过设置窗口或控件的 acceptDrops 属性为 true 来实现。

2.重写 dragEnterEvent:

  重写dragEnterEvent 函数,以便在拖拽操作进入窗口或控件时能够响应。在这个函数中,你可以检查拖拽的数据类型,确认是否包含文件。

3.重写 dropEvent:

  重写dropEvent 函数,以便在拖拽操作完成时能够处理拖拽的数据。在这个函数中,你可以从 QMimeData 对象中提取文件路径,并执行相应的操作。

示例: 头文件:

#pragma once

#include <QLabel>

class xbDropDreaLabel  : public QLabel
{
	Q_OBJECT

public:
	xbDropDreaLabel(QWidget *parent = nullptr);
	~xbDropDreaLabel();

Q_SIGNALS:
	//收到拖入的文件列表
	void filePath(QStringList fileList);

protected:
	void dragEnterEvent(QDragEnterEvent* event) override;
	void dropEvent(QDropEvent* event) override;

};

cpp文件:

#include "xbDropDreaLabel.h"
#include <qdebug.h>
#include <QLabel>
#include <QDragEnterEvent>
#include <QMimeData>

xbDropDreaLabel::xbDropDreaLabel(QWidget *parent)
	: QLabel(parent)
{
	setAcceptDrops(true);
}

xbDropDreaLabel::~xbDropDreaLabel()
{}


void xbDropDreaLabel::dragEnterEvent(QDragEnterEvent* event) {
    if (event->mimeData()->hasUrls()) {
        event->acceptProposedAction();
    }
}

void xbDropDreaLabel::dropEvent(QDropEvent* event) {
    const QMimeData* mimeData = event->mimeData();
    if (mimeData->hasUrls()) {
        QList<QUrl> urlList = mimeData->urls();
        QStringList list;
        for (const QUrl& url : urlList) {
            list.append(url.toLocalFile());
            qDebug() << u8"拖拽的文件路径:" << url.toLocalFile();
        }

        Q_EMIT filePath(list);
    }
}

 

标签:mimeData,接收,QT,void,拖拽,xbDropDreaLabel,include,event
From: https://www.cnblogs.com/huahankeji/p/18083372

相关文章

  • FPGA之串口接收数据(看注释)
    兜兜转转看了好多家视频和好几本书,明白了FPGA难学的原因之一是因为讲的好(我觉得就是很详细,告诉你为什么这么来写代码)的视频比较少,之前看到的那本书其实也很好,只是没有说为什么这么写,以及某些步骤的用意,这次看了野火的视频,发现挺符合我的需求,他们视频和我借的那本书思路是相同的,野......
  • Qt UI项目参考
    QtFluentDesign-main原始界面: 应用了Fluent风格: Navigation-Bar-Office-Style-Tab-Bar-master侧边栏展开: 侧边栏折叠: qt-material-widgets-master    qt-UI-master[and]QSSHub-master[and]QDarkStyleSheet-master[and]qt-material-stylesheet-maste......
  • PyQt5 GUI编程
    一.PyQt5简介PyQt5是一个用于创建图形用户界面(GUI)应用程序的跨平台工具集,它将Qt库(广泛用于C++编程语言中创建丰富的GUI应用程序)的功能包装给Python使用者。PyQt5是由RiverbankComputing开发的,并且可以在所有主流操作系统上运行,包含Windows、macOS和Linux。PyQt5包括了超过620个......
  • Qt 编译qt-material-widgets皮肤的方法
    编译qt-material-widgets皮肤的方法首先qt-material-widgets的源代码直接拉下来是无法编译的,我们只能根据报错一步步寻找如何编译。1.必须先编译components项目得到lib文件2.然后编译examples,但是发现编译失败3.因为在examples,pro默认为linux库,修改其中内容,libcomponents.a......
  • 前端传list集合,后端接收
    一、前端列表多选<el-tableref="multipleTable":data="tableData"stripestyle="width:99%;margin-bottom:10px;":height="$publicjs.tableHeight"@se......
  • 前端学习-vue视频学习009-defineProps(子组件接收父组件的数据)
    尚硅谷视频链接defineProps-只接收父:要有数据letpersonList=reactive<personArr>([{id:'qqq1',name:'aaa',age:10,gender:'F'},{id:'qqq2',name:'vvv',age:30,gender:'F'},{id:'qq......
  • Qt 布局中控件重叠、挤压的解决方法
    问题描述:在QtDesigner中设计布局时,对所有控件使用QGridLayout、QHBoxLayout或QVBoxLayout布局设置。可以正常预览(Preview),但C++编译后,所有控件挤到一起,布局设置失效。问题解析:预览时正常,说明不是Qt的问题,应该与C++代码有关。问题解决:查看与ui关联的代码,发现这个......
  • Qt QScrollArea滚动条不出现问题
    问题在做仿B站标签创建框时候,用到了ScrollArea,平时这个控件很少用,所以这次使用时候又遇到了滚动问题。我直接往scroll里丢了一个layout,但是无论我layout怎么撑大,scroll始终没有出现滚动条。所以我试着打印scroll内部的widget的size,结果直接报错。1QScrollAreaarea=newQ......
  • 【QT+QGIS跨平台编译】之八十二:【QGIS_Gui跨平台编译】—【错误处理:QgsExpressionCont
    文章目录一、未定义基类QgsExpressionContextGenerator二、错误处理一、未定义基类QgsExpressionContextGenerator报错信息二、错误处理第33行增加:#include"qgsexpressioncontextgenerator.h"......
  • qt内存管理
    #include"mainwindow.h"#include"ui_mainwindow.h"#include<QDebug>MainWindow::MainWindow(QWidget*parent):QMainWindow(parent),ui(newUi::MainWindow){ui->setupUi(this);}MainWindow::~MainWindow(){d......