效果预览:
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