QT 实现windows系统文件拖拽

这篇具有很好参考价值的文章主要介绍了QT 实现windows系统文件拖拽。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

效果预览:

QT 实现windows系统文件拖拽,C++,Qt,Windows,C++,qt,windows

2023-07-05 14-29-11

功能描述:

1.首先实现了根据文件的路径获取了文件的信息,通过 QFileIconProvider 获取图标信息,并在界面上进行展示。

2.dropEvent 是实现拖拽功能的核心。重新此事件函数,并将窗口设置为接受拖拽

setAcceptDrops(true);  /* 允许拖放 */

3.对文件进行类型判断,为了后续功能的使用。进行了简单的分类,图片,音频,视频,APP以及其他。并非判断文件后缀,而是使用QMimeType进行类别判断。

Qt的拖放操作

拖放操作分为拖动Drag和放下Drop,Qt提供了强大的拖放机制,可在帮助文档中通过Drag and Drop关键字查看

在Qt中,数据拖动时会被存储为MIME类型(Multipurpose Internet Mail Extensions)。Qt提供QMimeData类表示MIME类型的数据,并使用QDrag类完成数据的转移,整个拖放操作是在几个鼠标事件和拖放事件中完成的。

拖放事件:

dragEnterEvent() 拖动进入事件;
dropEvent()放下事件

核心代码:

.h
void dragEnterEvent(QDragEnterEvent *event);
    void dragMoveEvent(QDragMoveEvent *event);
    void dragLeaveEvent(QDragLeaveEvent *event);
    void dropEvent(QDropEvent *event);
    void mousePressEvent(QMouseEvent* event);
.cpp
void Widget::dragEnterEvent(QDragEnterEvent *event)
{
    // 拖动进入事件
    if(event->mimeData()->hasUrls())  // 数据中是否包含URL
    {
        event->acceptProposedAction();  // 如果数据中包含URL,就接收动作
    }
    else
    {
        event->ignore();  // 如果数据中不包含URL,就忽略该事件
    }
}

void Widget::dropEvent(QDropEvent *event)
{
    // 放下事件
    const QMimeData *mimeData = event->mimeData();  // 获取MIME数据
    if(mimeData->hasUrls())  // 如果数据中包含URL
    {
        QList<QUrl> urlList = mimeData->urls();  // 获取URL列表
        // 将其中的第一个URL表示为本地文件路径
        QString fileName = urlList.at(0).toLocalFile();  // toLocalFile()转换未本地文件路径
        if(!fileName.isEmpty())
        {
            // 文件路径不为空
            QFile file(fileName);
            if(!file.open(QIODevice::ReadOnly))
                return;
            QTextStream in(&file);
            ui->textEdit->setText(in.readAll());  // 将文件中的所有内容读入到控件中
        }
    }
}

ui文件

主要用来展示文件信息,图标以及名称

<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
 <class>LS_Files</class>
 <widget class="QWidget" name="LS_Files">
  <property name="geometry">
   <rect>
    <x>0</x>
    <y>0</y>
    <width>75</width>
    <height>120</height>
   </rect>
  </property>
  <property name="windowTitle">
   <string>Form</string>
  </property>
  <property name="toolTip">
   <string>假装是文件信息</string>
  </property>
  <layout class="QGridLayout" name="gridLayout">
   <property name="leftMargin">
    <number>0</number>
   </property>
   <property name="topMargin">
    <number>0</number>
   </property>
   <property name="rightMargin">
    <number>0</number>
   </property>
   <property name="bottomMargin">
    <number>0</number>
   </property>
   <property name="spacing">
    <number>0</number>
   </property>
   <item row="0" column="0">
    <layout class="QVBoxLayout" name="verticalLayout">
     <property name="spacing">
      <number>0</number>
     </property>
     <item>
      <layout class="QHBoxLayout" name="horizontalLayout">
       <property name="spacing">
        <number>0</number>
       </property>
       <item>
        <spacer name="horizontalSpacer">
         <property name="orientation">
          <enum>Qt::Horizontal</enum>
         </property>
         <property name="sizeHint" stdset="0">
          <size>
           <width>40</width>
           <height>20</height>
          </size>
         </property>
        </spacer>
       </item>
       <item>
        <widget class="QLabel" name="label_pic">
         <property name="minimumSize">
          <size>
           <width>50</width>
           <height>50</height>
          </size>
         </property>
         <property name="maximumSize">
          <size>
           <width>50</width>
           <height>50</height>
          </size>
         </property>
         <property name="styleSheet">
          <string notr="true"/>
         </property>
         <property name="text">
          <string/>
         </property>
        </widget>
       </item>
       <item>
        <spacer name="horizontalSpacer_2">
         <property name="orientation">
          <enum>Qt::Horizontal</enum>
         </property>
         <property name="sizeHint" stdset="0">
          <size>
           <width>40</width>
           <height>20</height>
          </size>
         </property>
        </spacer>
       </item>
      </layout>
     </item>
     <item>
      <spacer name="verticalSpacer">
       <property name="orientation">
        <enum>Qt::Vertical</enum>
       </property>
       <property name="sizeHint" stdset="0">
        <size>
         <width>20</width>
         <height>4</height>
        </size>
       </property>
      </spacer>
     </item>
    </layout>
   </item>
   <item row="1" column="0">
    <widget class="QLabel" name="label_name">
     <property name="minimumSize">
      <size>
       <width>75</width>
       <height>65</height>
      </size>
     </property>
     <property name="maximumSize">
      <size>
       <width>75</width>
       <height>16777215</height>
      </size>
     </property>
     <property name="styleSheet">
      <string notr="true"/>
     </property>
     <property name="text">
      <string>文件名</string>
     </property>
     <property name="alignment">
      <set>Qt::AlignHCenter|Qt::AlignTop</set>
     </property>
     <property name="wordWrap">
      <bool>true</bool>
     </property>
    </widget>
   </item>
  </layout>
 </widget>
 <resources/>
 <connections/>
</ui>

源码:

 https://download.csdn.net/download/scz653037148/88001158https://download.csdn.net/download/scz653037148/88001158GitHub - Qtea653037148/demo_drag_file: windows下拖拽文件windows下拖拽文件. Contribute to Qtea653037148/demo_drag_file development by creating an account on GitHub.https://github.com/Qtea653037148/demo_drag_file文章来源地址https://www.toymoban.com/news/detail-527724.html

到了这里,关于QT 实现windows系统文件拖拽的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • QT 应用程序在 Windows 系统上出现中文乱码

    Windows 早期采用多字节编码,的确容易出现乱码问题。随着 Windows 全面转向 Unicode 编码,多语言的支持得到完美解决,出现中文乱码的问题就很少出现。出现乱码问题一般是 GBK 编码的文件当做 utf8 编码打开,或者 utf8编码的文件当做 GBK 编码打开。这种情况也多出现在 Linux 和

    2024年01月16日
    浏览(32)
  • Qt实现全局键盘事件监听器-Windows

    更多精彩内容 👉个人内容分类汇总 👈 👉Qt自定义模块、工具👈 Qt版本:V5.12.5 兼容系统: Windows:这里测试了Windows10,其它的版本没有测试; Linux:这里测试了ubuntu18.04、20.04,其它的没有测试; Mac:等啥时候我有了Mac电脑再说。 有时候我们想获取到全局键盘事件,使用

    2024年02月09日
    浏览(35)
  • Qt实现全局鼠标事件监听器-Windows

    更多精彩内容 👉个人内容分类汇总 👈 👉Qt自定义模块、工具👈 Qt版本:V5.12.5 兼容系统: Windows:这里测试了Windows10,其它的版本没有测试; Linux:这里测试了ubuntu18.04、20.04,其它的没有测试; Mac:等啥时候我有了Mac电脑再说。 有时候我们想获取到【系统全局鼠标事件】

    2024年02月16日
    浏览(28)
  • 【VTK】读取一个 STL 文件,并使用 Qt 显示出来,在 Windows 上使用 Visual Studio 配合 Qt 构建 VTK

    知识不是单独的,一定是成体系的。更多我的个人总结和相关经验可查阅这个专栏:Visual Studio。 直接先把效果放出来,有需要就往下看。 骷髅3D打印3D模型

    2024年02月14日
    浏览(52)
  • 2. windows系统下在QT中配置OPenCV开发环境

    1. 说明: 在Windows系统中配置相对简单,不需要对下载的源码进行编译,在官网上下载的OPenCV可以直接使用,本文系统版本为win10,opencv是最新版本4.7.0。 效果展示: 2. 配置步骤: 2.1 下载OPenCV压缩包 打开opencv的官网OPenCV下载地址,可以在其页面内下载到最新的压缩包,如下

    2024年02月09日
    浏览(41)
  • QT 判断当前操作系统是否为 Windows 8 及以下版本

    判断当前操作系统是否为 Windows 8 及以下版本,可以使用 QSysInfo 类中的静态函数 QSysInfo::windowsVersion(),其返回值是一个 QOperatingSystemVersion 类型的对象,包含了当前操作系统的主版本号、次版本号和补丁版本号。我们可以通过比较主版本号进行判断,如下所示:

    2023年04月09日
    浏览(32)
  • 个人实现的QT拼图游戏(开源),QT拖拽事件详解

    效果图 引言 在学习QT demo时,发现有一个拼图demo,介绍拖拽事件的。以此为蓝本加了 亿点 修饰,就诞生了这个游戏。 玩法 游戏为拼图游戏,分为俩种模式(闯关与休闲)。 闯关模式:在规定的时间内完成拼图,共有四关,有三种难度,每种难度所需的时间不一致。 休闲模

    2024年01月20日
    浏览(34)
  • Qt拖拽事件简单实现

    重写resizeEvent(这个按需重写)、dragEnterEvent(拖拽事件函数)、dropEvent(放下事件函数),可以将本地图片拖拽到label标签中  

    2024年01月20日
    浏览(40)
  • 一.QT QT6.5快速安装(Windows)

    本文仅适用于初学者参考!!! 如有错误和疑问请指出  点开 下载 打开命令行: 快捷键win+r 输入cmd 输入D:qt-unified-windows-x64-4.5.1-online.exe --mirror https://mirrors.ustc.edu.cn/qtproject(因为我的安装器下在D盘所以开头是D:,其他盘相同)                               

    2023年04月25日
    浏览(32)
  • QT基于TCP协议实现数据传输以及波形绘制——安卓APP及Windows程序双版本

    文章代码有非常非常之详细的解析!!!诸位可放心食用 这个玩意我做了两个,一个是安卓app,一个是Windows程序。代码并非全部都是由我从无到有实现,只是实现了我想要的功能。多亏了巨人的肩膀,开源万岁!!! 我把程序放到GitHub上,需要的可自取。 安卓app:   mai

    2024年02月15日
    浏览(32)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包