Qt拖拽文件到窗口、快捷方式打开

news2025/1/26 11:45:27

  大部分客户端都支持拖拽文件的功能,本篇博客介绍Qt如何实现文件拖拽到窗口、快捷方式打开,以我的开源视频播放器项目为例,介绍拖拽视频到播放器窗口打开。
  需要注意的是,Qt拖拽文件的功能,不支持以管理员权限启动的项目,例如在VS2022项目属性里设置UAC级别为管理员:
在这里插入图片描述
  如果是管理员权限,那么Qt拖拽文件的功能将被禁止使用,如果项目必须要用管理权限,可以考虑将管理员权限的功能独立为子进程,主进程是普通权限即可。

  Qt的拖拽功能实现
(1)设置可拖拽

setAcceptDrops(true);

(2)重写关于拖拽的事件

void VideoWidget::dragEnterEvent(QDragEnterEvent* event)
{
	if (event->mimeData()->hasFormat("text/uri-list")) {
		event->acceptProposedAction();
	}
}

// 注意windows下如果使用管理员权限,Qt的拖拽功能将被禁止
void VideoWidget::dropEvent(QDropEvent* event)
{
	QList<QUrl> urls = event->mimeData()->urls();
	if (urls.isEmpty())
		return;

	QStringList video_list;

	// 遍历 URL 列表
	for (const QUrl& url : urls) 
	{
		// 将 URL 转换为本地文件路径
		QString filePath = url.toLocalFile();
		if (isVideoFile(filePath))
		{
			video_list.append(filePath);
		}
	}

	if (video_list.size() < 1)
	{
		return;
	}

	emit sig_OpenFile(video_list);
}

具体代码,可参考我的开源项目QQMediaPlayerCopy的实现:https://github.com/linghuzhangmen/QQMediaPlayerCopy

运行效果:
在这里插入图片描述
当拖拽多个视频时,右侧播放列表会展开。
注意,拖拽时需要检查文件格式,比如我在代码里检查的是视频格式:

bool VideoWidget::isVideoFile(const QString& filePath)
{
	// 创建一个 QFileInfo 对象,它提供了关于文件的信息
	QFileInfo fileInfo(filePath);

	// 获取文件的后缀
	QString fileSuffix = fileInfo.suffix().toLower();

	// 定义一个包含常见视频文件后缀的字符串列表
	QStringList videoSuffixes = { "mp4", "mkv", "avi", "mov", "flv", "wmv" };

	// 检查文件后缀是否在视频后缀列表中
	return videoSuffixes.contains(fileSuffix);
}

  如果有多层视频窗口该怎么写drag事件呢,比如主窗口上还加了好几层窗口,我这里是写到了视频播放窗口,然后将视频列表信息发信号到主窗口进行播放。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1094350.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

《PyTorch深度学习实践》第三讲 反向传播

《PyTorch深度学习实践》第三讲 反向传播 问题描述问题分析编程实现代码实现效果 参考文献 问题描述 问题分析 编程实现 代码 import torch # 数据集 x_data [1.0, 2.0, 3.0] y_data [2.0, 4.0, 6.0] # w权重 w torch.tensor([1.0]) w.requires_grad True # 需要计算梯度…

Kubernetes实战(二)-使用Kor过滤Kubernetes未使用资源

1 概述 Kor 是一个找到未使用 Kubernetes 资源的工具。目前&#xff0c;Kor 能够识别并列出以下未使用的资源&#xff1a; ConfigMap Secret Service ServiceAccount Deployment StatefulSet Role HPA PVC Ingresse PDB 2 安装部署 安装方法 从发布页面下载对应你…

OFDM原理及MATLAB仿真

文章目录 前言一、OFDM 总体概述1、OFDM 概述2、OFDM 优点 二、OFDM 基本原理1、基本思想2、OFDM 调制和解调3、OFDM 系统的发射机和接收机框图 三、OFDM 系统数学模型1、sinc 函数2、OFDM 时域表达式3、OFDM 频域表达式 四、OFDM 时域及频域仿真1、绘制时域及频域波形①、MATL…

SpringCloud-Sleuth

一、介绍 &#xff08;1&#xff09;用于追踪服务链路 &#xff08;2&#xff09;搭配zipkin实现 二、项目搭建 &#xff08;1&#xff09;下载zipkin.jar https://repo1.maven.org/maven2/io/zipkin/java/zipkin-server/2.12.9/&#xff08;2&#xff09;运行 java -jar …

Android---Android 是如何通过 Activity 进行交互的

相信对于 Android 工程师来说&#xff0c;startActivity 就像初恋一般。要求低&#xff0c;见效快&#xff0c;是每一个菜鸟 Android 工程师迈向高级 Android 工程师的必经阶段。经过这么多年的发展&#xff0c;startActivity 在 google 的调教下已经变得愈发成熟&#xff0c;对…

Python文件读写实战:处理日常任务的终极工具!

更多资料获取 &#x1f4da; 个人网站&#xff1a;涛哥聊Python Python文件的读写操作时&#xff0c;有很多需要考虑的细节&#xff0c;这包括文件打开方式、读取和写入数据的方法、异常处理等。 在本文中&#xff0c;将深入探讨Python中的文件操作&#xff0c;旨在提供全面的…

Python开发者的宝典:CSV和JSON数据处理技巧大公开!

更多资料获取 &#x1f4da; 个人网站&#xff1a;涛哥聊Python 在Python中处理CSV和JSON数据时&#xff0c;需要深入了解这两种数据格式的读取、写入、处理和转换方法。 下面将详细介绍如何在Python中处理CSV和JSON数据&#xff0c;并提供一些示例和最佳实践。 CSV数据处理…

项目配置vue.config jsconfig babel.config .prettierc .env .eslintrc

.env 在一个产品的前端开发过程中&#xff0c;一般来说会经历本地开发、测试脚本、开发自测、测试环境、预上线环境&#xff0c;然后才能正式的发布。对应每一个环境可能都会有所差异&#xff0c;比如说服务器地址、接口地址、websorket地址…… 等等。在各个环境切换的时候&am…

java的Timer全网最详细总结

1.简介 在Java 1.3版本中引入了Timer工具类&#xff0c;它是一个古老的定时器&#xff0c;通常与TimerTask和TaskQueue一起使用。Timer工具类的实现涉及到TimerTask类、Timer类、TimerQueue类和TimerThread类。其中&#xff0c;TimerQueue和TimerThread类与Timer类位于同一个类…

docker安装skyWalking笔记

确保安装了docker和docker-compose sudo docker -v Docker version 20.10.12, build 20.10.12-0ubuntu4 sudo docker-compose -v docker-compose version 1.29.2, build unknown 编写docker-compose.yml version: "3.1" services: skywalking-oap:image: apach…

创意作品管理软件 Bridge 2024 mac中文版 br2024功能特色

Bridge 2024 mac旨在连接不同的Ad obe应用程序&#xff0c;帮助用户更轻松地管理和编辑他们的创意作品。 Bridge 2024 mac软件特色和功能介绍 一致的用户体验&#xff1a;Bridge 2024现在具有增强的用户界面&#xff0c;可提供与其他Creative Cloud应用程序类似的体验。用户还…

《向量数据库指南》——向量数据库一些技术难点

一些技术难点 在文章的前半部分,我们列举了一些向量数据库应该具备的特性,然后比较了以 Milvus 为代表的向量数据库和 ANN 算法库、向量检索插件的不同之处。接下来,我们来聊聊构建向量数据库过程中会遇到的一些技术难点。 就好像一架飞机一样,内部每个零部件和系统相互连通…

PPP的建链过程

下图是PPP协议整个链路过程需经历阶段的状态转移图&#xff1a; 图1 PPP链路建立过程 PPP运行的过程简单描述如下&#xff1a; 通信双方开始建立PPP链路时&#xff0c;先进入到Establish阶段。 在Establish阶段&#xff0c;PPP链路进行LCP协商。协商内容包括工作方式是SP&am…

解决win10因为WSL问题无法正常启动docker

解决win10无法成功启动dockerdesktop因为WSL问题无法启动 问题起因解决方法 问题起因 因为需要在windows复现一个CVE漏洞&#xff0c;就需要安装在WIN10上装docker&#xff0c;但是在启动的时候出现下面报错。 然后查了一下是因为WSL的版本太低了。更新以后发现打开docker仍然…

C++20中的关键字

文章目录 前言关键字列表关键字含义总结 前言 源于上一篇中提到了 decltype是一个关键字&#xff0c;所以去查了现有的关键字列表&#xff0c;其实我对C/C的关键字还停留在上世纪大概30多个的时代&#xff0c;虽然知道C加了 auto、constexpr 等关键字&#xff0c;但查询过后才…

52 杨辉三角

杨辉三角 题解1 DP 给定一个非负整数 numRows&#xff0c;生成 杨辉三角的前 numRows 行。 在杨辉三角中&#xff0c;每个数是它左上方和右上方的数的和。 示例 1: 输入: numRows 5 输出: [[1],[1,1],[1,2,1],[1,3,3,1],[1,4,6,4,1]] 示例 2: 输入: numRows 1 输出: [[1…

关于操作系统中对进程管理的认识

文章目录 前言1.计算机组成简单认识2.操作系统1). 操作系统的管理2). 操作系统的目的 3.操作系统中的进程管理1). 进程是什么&#xff1f;2).Linux中的进程 前言 在介绍进程之前&#xff0c;我们需要先了解关于进程的一些边缘的操作系统知识 以及硬件知识&#xff0c;因为操作…

leetCode 1143.最长公共子序列 动态规划 + 图解

此题我的往期文章推荐&#xff1a; leetCode 1143.最长公共子序列 动态规划 滚动数组-CSDN博客https://blog.csdn.net/weixin_41987016/article/details/133689692?spm1001.2014.3001.5501leetCode 1143.最长公共子序列 一步步思考动态规划 优化空间复杂度_呵呵哒(&#xf…

Lua 调试库( debug )

一、调试库作用 使用调试库可以获取 Lua 环境运行过程中的变量和跟踪代码执行。 调试库主要分为两类函数&#xff1a;自省函数和钩子函数 自省函数&#xff1a;允许检查一个正在运行中的程序&#xff0c;例如活动函数的栈、当前正在执行的代码行、局部变量的名称和值。钩子函…

Java多线程悲观锁和乐观锁

悲观锁&#xff1a; 一上来就加锁&#xff0c;没有安全感&#xff0c;每次只能一个线程进入访问完毕后&#xff0c;再解锁。 线程安全&#xff0c;性能较差 乐观锁&#xff1a; 一开始不上锁&#xff0c;认为是没有问题的&#xff0c;大家一起跑&#xff0c;等要出现线程安全问…