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

学习C++、QT---23(QT中QFileDialog库实现文件选择框打开、保存讲解)

每日一言

        生活不会亏待认真对待它的人,越努力,越幸运。

QFileDialog文件选择框

现在我们来学习这个QFileDialog

我们的记事本肯定要用文件选择框来选择文件啊,就是我们记事本的这个功能

有 打开,取消,类似这样的一个文件选择框

那么我们怎么实现呢?

QT有一个叫做QFileDialog类,是用于做这个文件选择框的,那么使用方法的话,老样子我们去查看帮助文档

看看,我们就可以根据这个案例我们来进行仿写

首先我搞了三个QPushbutton

tr("Open File"),这个是文件选择框左上角的提示信息

 "E:/qianrushi/QT/QTcodeLesson",这个是打开的路径

  tr("Text (*.txt)"));这个右下角的过滤器,只让选择.txt文件,以提示信息Text

那么我们仿写上去之后,发现

虽然打开了文件选择框,但是选择文件后,直接关闭了,什么事都不做,于是我将fileName进行打印,发现,这个filename是文件的路径,那么根据我们之前的积累,会懂得,那么我们就进行文件的操作,利用QFile类和QTextStream进行将文件读取出来

但是别忘了哈,我们会发现如果出现了中文的乱码我们还是要进行编码的处理setcodec()

那么我们现在是去实现保存的功能

根据这个我们之前的这个打开的案例的印象

我们要去选择这个getSaveFileName这个就是官方给我们写好的案例,点击它

这个就是保存的案例

一样的,就是这个路径上面我们看到一个undefine.txt这个就是我们点击保存的时候默认的名字和后缀,下方有图

那么我们保存的话也是和打开是一样的,原理

现在,我们需要自己去学习这个Dialog,那就是不使用静态函数,自己进行创建一个Dialog,就像我们学习QFile一样也有案例

也都是在帮助文档里面

我们看不懂英文的话一定要像我一样去下载一个翻译器,这样好多了

那么我们根据官方的案例我们自己创建一个Dialog

都是根据案例走的,解释一下吧,首先我们创建了一个QFileDialog对象叫做qfileDialog  ,调用这个setFileMode这个函数是为了通过调用这个函数让我们可以选择哪些文件,这边我们设置的是可以选择多个已存在的文件

这边我们选择的是Existing Files目的是到时候我们可以选择多个文件进行打开,和显示多个文件的内容

 qfileDialog.setNameFilter("Text(*.txt)");这个就是过滤器了,设置为.txt才符合我们的记事本的特性

qfileDialog.exec()这个的话就是等于是运行这个文件选择框的作用,没有这句话,文件选择框就看不到

fileNames = qfileDialog.selectedFiles();

这个selectedFiles()函数返回的是文件路径列表,也就是我们选择了多个文件的话就会都放在列表里面,所以我们要是想要输出路径的话需要遍历列表,

现在这个fileNames就是QStringList类型

 for(QString str : fileNames){

         qDebug()<<str;

         QFile file;

         file.setFileName(str);

         if(!file.open(QIODevice::ReadWrite|QIODevice::Text)){

             qDebug()<< "open error";

         }

         QTextStream in(&file);

         in.setCodec("UTF-8");

         while(!in.atEnd()){

             QString context = in.readLine();

             qDebug()<<context;

         }

    }

}

涨知识:我们使用这个方法将文件的路径和内容都输出出来

这是 C++11 引入的范围 - based for 循环(Range-based for loop),在 Qt 框架中处理QStringList等容器时非常常用。它提供了一种简洁的语法来遍历容器中的每个元素。

for (类型 变量名 : 容器表达式) {

    // 使用变量名访问当前元素}

}

继承关系

  • QList<T>:是 Qt 的通用容器类,用于存储任意类型的对象(模板类)。
  • QStringList:是 **QList<QString>** 的专用子类,专门用于存储字符串(QString)。

我们要牢牢记住

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

相关文章:

  • 行测速算之假设分配法
  • 在 JetBrains 系列 IDE(如 IntelliJ IDEA、PyCharm 等)中如何新建一个 PlantUML 文件
  • Java集合框架深度解析:LinkedList vs ArrayList 的对决
  • 【Linux | 网络】应用层(HTTP)
  • Linux|服务器|二进制部署nacos(不是集群,单实例)(2025了,不允许还有人不会部署nacos)
  • 【PTA数据结构 | C语言版】简单计算器
  • 【Linux】线程机制深度实践:创建、等待、互斥与同步
  • 详解Linux下多进程与多线程通信(二)
  • ARC 02 runner scale set chart:对接集群与 Github Action 服务器
  • linux上的软挂载操作方法
  • DAY02:【ML 第一弹】KNN算法
  • 分类问题-机器学习
  • 掌握系统设计的精髓:12个核心设计模式的通俗解读
  • NW756NW815美光固态闪存NW821NW828
  • 设计模式深度解析:单例、工厂、适配器与代理模式
  • 【leetcode】字符串,链表的进位加法与乘法
  • 5G NR PDCCH之处理流程
  • Web攻防-PHP反序列化原生内置类Exception类SoapClient类SimpleXMLElement
  • 预处理器完整功能介绍和示例演示(LESS/SCSS)
  • MYSQL笔记1
  • RabbitMQ队列的选择
  • 微信小程序案例 - 本地生活(首页)
  • CCS-MSPM0G3507-6-模块篇-OLED的移植
  • 什么时候需要用到 multiprocessing?
  • 深度学习图像分类数据集—猫七种表情识别分类
  • Android 响应式编程完整指南:StateFlow、SharedFlow、LiveData 详解
  • MySQL 的 `EXPLAIN` 输出中,`filtered` 属性使用
  • spring--@Autowired
  • spring-ai-alibaba 1.0.0.2 学习(十六)——多模态
  • Java_Springboot技术框架讲解部分(二)