当前位置: 首页 > news >正文

Qt 打开文件列表选择文件,实现拖拽方式打开文件

1. 实现打开文件列表选择文件

1.1. 创建 Qt 工程,并添加几个简单控件

这里笔者选用的是 QMainWindow,创建好工程后在 ui 界面设计中添加 QLineEditQPushBtton至少这两个控件,如下图摆放。

在这里插入图片描述

1.2. 头文件中添加相关操作

mainwindow.h 中添加所要用到的所有头文件。

#include <QString>
#include <QFileDialog>
#include <QStandardPaths>

并声明一个槽函数用于打开文件浏览器。

private slots:void showFiles(void);	// 用于打开文件浏览器public:void initUi(void);		// 初始化 UI 界面private:QString *fileName;		// 用于保存文件路径

1.3. 在 cpp 文件中实现

initUi 函数,实现如下:

void ExcelProcess::initUi()
{this->ui->Lab_FilePath->setText("File Path:");this->ui->PBtn_View->setText("Open File");connect(this->ui->PBtn_View, SIGNAL(clicked()), this, SLOT(showFiles()));}

showFiles 槽函数,实现如下:

void ExcelProcess::showFiles()
{QString str = QFileDialog::getOpenFileName(this, "File Explorer", QStandardPaths::writableLocation(QStandardPaths::DocumentsLocation),"Excel 文件(*.xls *.xlsx);;All file(*.*)");this->ui->LEdit_FilePath->setText(str.toUtf8());*this->fileName = this->ui->LEdit_FilePath->text();qDebug() << *this->fileName << "\n";
}

1.4. 效果演示

完成如上函数,并在构造函数中调用即可,运行查看效果。

请添加图片描述

2. 实现文件拖拽的方式加载

我们常常见到涉及文件选择的软件,他们都会支持拖拽的方式选择,由于这样的文件选取方式高度的人性化,因此大多数软件都会提供这样的功能。下面就来看看用 Qt 如何实现吧。

2.1. 添加相关头文件,并声明相关操作函数

添加头文件:

#include <QDragEnterEvent>
#include <QDropEvent>
#include <QMimeData>

这里是通过重写下面两个函数来实现文件拖拽功能:

protected:void dragEnterEvent(QDragEnterEvent *event);    // 拖动进入事件void dropEvent(QDropEvent *event);      // 放下事件

2.2. 在 cpp 文件中实现其具体功能

在构造函数中添加如下代码:

this->setAcceptDrops(true);     // 设置主界面接收拖动进来的文件

拖动函数重写:

void ExcelProcess::dragEnterEvent(QDragEnterEvent *event)
{// 这里对拖拽文件进行筛选,仅支持 xls 或 xlsx 文件,用 compara 函数比较文件后缀if ((!event->mimeData()->urls()[0].fileName().right(3).compare("xls")) || (!event->mimeData()->urls()[0].fileName().right(4).compare("xlsx"))) {event->acceptProposedAction();} else {event->ignore();	// 若非这两种文件则不接受鼠标事件}return ;
}void ExcelProcess::dropEvent(QDropEvent *event)
{const QMimeData *qm = event->mimeData();*this->fileName = qm->urls()[0].toLocalFile();  // 获取拖入的文件名this->ui->LEdit_FilePath->setText(*this->fileName);this->movie_01->stop();this->movie_01->setFileName(":/bk/pic/bk_02.gif");this->movie_01->start();return ;
}

2.3. 效果演示

完成如上函数,运行查看效果。

请添加图片描述

#完

http://www.lryc.cn/news/145480.html

相关文章:

  • [C/C++]天天酷跑游戏超详细教程-上篇
  • 5G NR:RACH流程 -- Msg1之选择正确的PRACH时频资源
  • 在vue3项目中编辑的时候,解决对话框里边的数据和列表中的数据联动了。深复制
  • 循环结构(个人学习笔记黑马学习)
  • ceph中PGLog处理流程
  • macOS使用命令行连接Oracle(SQL*Plus)
  • Mac下使用Homebrew安装MySQL5.7
  • centos安装Nginx配置Nginx
  • Linux环境下搭建使用缓存中间件Redis
  • Oracle 本地客户端连接远程 Oracle 服务端并使用 c# 连接测试
  • java中上传文件先下载到本地再上传还有就是直接通过文件流url地址进行上传优缺点?
  • 华为复合vlan(mux vlan)
  • 第62步 深度学习图像识别:多分类建模(Pytorch)
  • GPT带我学-设计模式-适配器模式
  • Pyecharts教程(七):使用pyecharts创建堆叠柱状图的示例
  • C++中的强制转换的常用类型及应用场景详解
  • ubuntu调整时区
  • mybatis:动态sql【2】+转义符+缓存
  • 2021年09月 C/C++(五级)真题解析#中国电子学会#全国青少年软件编程等级考试
  • Ansible学习笔记1
  • 解决centos离线安装cmake找不到OpenSSL问题
  • Java 中数据结构ArrayList的用法
  • UDP 多播(组播)
  • 分布式环境集成JWT(Java Web Token)
  • Python实战之数据表提取和下载自动化
  • Midjourney学习(三)6个高级应用
  • C语言:指针类型的意义
  • 如何将 PDF 转换为 Word:前 5 个应用程序
  • AP5192 DC-DC降压恒流LED汽车头灯摩托车电动车大灯电源驱动
  • Python Opencv实践 - Canny边缘检测