QT学习文件操作类 QFile

(一)QFile

QFile Qt 框架中用于文件处理的一个类。它提供了读取和写入文件的功能,支持文本和二进制文件。QFile 继承自 QIODevice ,因此它可以像其他 IO 设备一样使用。

(1)主要功能

1. 文件读写 QFile 支持打开文件进行读取或写入操作
2. 文件信息 :可以检索有关文件的信息,如大小、修改日期等。
3. 文件操作 :提供了对文件进行重命名、移动、删除等操作的能力。
4. 错误处理 QFile 在操作文件时提供了错误处理机制,可以通过相应的函数检查和获取错误信息。

常用方法

open() :打开一个文件。需要指定模式(如只读、只写、读写等)。
close() :关闭文件。
read() write() :用于读取和写入数据。
exists() :检查文件是否存在。
remove() :删除文件。
copy() :复制文件。

示例代码

以下是使用 QFile 的一个简单例子:
void Widget::on_pushOpenButton_clicked()
{
    char buff[100]={'\0'};
    QFile file("D:/test.txt");
    //打开文件
    if(!file.open(QIODevice::ReadOnly)){
         qDebug()<<"open file";
    }
    //读取文件
    if(file.read(buff,100)==-1){
        return;
    }

    //关闭文件
    file.close();
    qDebug()<<buff;
}

(二) QTextStream

QTextStream 的主要特性成一个表格。请看下表

QTextStream 是一个功能强大的类,用于处理文本数据,特别是在需要考虑字符编码和文本格式化的情况下。通过这些特性,它提供了一种灵活而强大的方式来读写和操作文本。

使用示例

以下是一个更详细的示例,展示了如何使用 QTextStream 来读写文件:
void Widget::on_readButton_clicked()
{
/************法一***********/
//    char buff[100]={'\0'};
//    QFile file("D:/test.txt");
//    //打开文件
//    if(!file.open(QIODevice::ReadOnly)){
//         qDebug()<<"open file";
//    }
//    //读取文件
//    if(file.read(buff,100)==-1){
//        return;
//    }

//    //关闭文件
//    file.close();
//    qDebug()<<buff;

/************法二***********/
    QFile file("D:/test.txt");
    //打开文件
    if(!file.open(QIODevice::ReadOnly | QIODevice::Text)){
         qDebug()<<"open file";
    }

    //输入流
    QTextStream in(&file);

    //设置编码格式
    in.setCodec("UTF-8");

    //读取内容
    //读取整个文件
    //QString text = in.read(file.size());

    while(!in.atEnd()){
        QString line = in.readLine();
        qDebug()<<line;
    }

    //关闭文件
    file.close();
}

void Widget::on_writeButton_clicked()
{
    QFile file("D:/test.txt");
    //打开文件
    if(!file.open(QIODevice::WriteOnly | QIODevice::Text)){
         qDebug()<<"open file error";
    }

    //输入流
    QTextStream out(&file);

    //设置编码格式
    out.setCodec("UTF-8");

    //写入数据
    out<<"hello world hhh";

    //关闭文件
    file.close();
}

(三) 文件选择对话框 QFileDialog

(1)QFileDialog开发流程

使用 QFileDialog 的基本步骤通常如下:
实例化 :首先,创建一个 QFileDialog 对象的实例
QFileDialog dialog ;
设置模式 :根据需要设置对话框的模式,如打开文件、保存文件等。
dialog . setFileMode ( QFileDialog::AnyFile );

设置过滤器:如果需要,可以设置文件类型过滤器,以限制用户可以选择的文件类型。 

dialog . setNameFilter ( tr ( "Images (*.png *.xpm *.jpg);;Text files (*.txt);;XML
files (*.xml)" ));

显示对话框:通过调用 exec() 方法显示对话框,并在用户作出选择后执行相应的操作 

if ( dialog . exec ()) {
        QStringList files = dialog . selectedFiles ();
        // 对用户选定的文件进行操作
}

 通过 selectedFiles 方法获取用户选择的文件路径列表,然后对这些文件进行相应的处理。 这是使用 QFileDialog 的基本模式。Qt 也允许使用静态方法直接创建和显示对话框,例如 QFileDialog::getOpenFileName() ,这些方法更简单,但提供的自定义选项较少。

(2)QFileDialog 打开开发案例
void Widget::on_writeButton_clicked()
{
    QFile file("D:/test.txt");
    //打开文件
    if(!file.open(QIODevice::WriteOnly | QIODevice::Text)){
         qDebug()<<"open file error";
    }

    //输入流
    QTextStream out(&file);

    //设置编码格式
    out.setCodec("UTF-8");

    //写入数据
    out<<"hello world hhh";

    //关闭文件
    file.close();
}

void Widget::on_dialogButton_clicked()
{

/********静态方法*******/
//    QString fileName = QFileDialog::getOpenFileName(this,
//        tr("Open Text"), "D:/", tr("Text files (*.txt)"));

//    qDebug()<<fileName;
    
    // 创建一个 QFileDialog 实例
    QFileDialog dialog(this);
    
    // 设置对话框为打开文件模式
    dialog.setFileMode(QFileDialog::ExistingFiles);

   // 设置文件过滤器
    dialog.setNameFilter(tr("Text (*.txt)"));

    dialog.setViewMode(QFileDialog::Detail);

    //显示对话框
    QStringList fileNames;
    if (dialog.exec())
        fileNames = dialog.selectedFiles();

    for(QString file : fileNames){
        qDebug()<<file<<endl;
    }
}

(3)QFileDialog 保存开发案例 

void Widget::on_saveButton_clicked()
{
    QString fileName = QFileDialog::getSaveFileName(this, tr("Save File"),
                               "D:/",
                               tr("Text files (*.txt)"));
    qDebug()<<fileName;

    QFile file;
    
    file.setFileName(fileName);
    
    if(!file.open(QIODevice::WriteOnly | QIODevice::Text)){
    qDebug() << "file open error";
    }
    
    QTextStream out(&file);
    out.setCodec("UTF-8");
    out << "Qdialog Write Data to the Txt File";
    file.close();
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

深度优先搜索(DFS)与广度优先搜索(BFS):探索图与树的算法

一、引言 在图论和树形结构中&#xff0c;搜索算法是寻找从起点到终点的路径的关键。其中&#xff0c;深度优先搜索&#xff08;DFS&#xff09;和广度优先搜索&#xff08;BFS&#xff09;是最常用且最基础的两种搜索算法。本文将详细介绍广度优先搜索&#xff08;BFS&#xf…

CVE-2022-25487 漏洞复现

漏洞描述&#xff1a;Atom CMS 2.0版本存在远程代码执行漏洞&#xff0c;该漏洞源于/admin/uploads.php 未能正确过滤构造代码段的特殊元素。攻击者可利用该漏洞导致任意代码执行。 其实这就是一个文件上传漏洞罢了。。。。 打开之后&#xff0c;/home路由是个空白 信息搜集&…

分享88个鼠标特效,总有一款适合您

分享88个鼠标特效&#xff0c;总有一款适合您 88个鼠标特效下载链接&#xff1a;https://pan.baidu.com/s/1ljcxwgXGpw7baiufUGJjZA?pwd8888 提取码&#xff1a;8888 Python采集代码下载链接&#xff1a;采集代码.zip - 蓝奏云 学习知识费力气&#xff0c;收集整理更不…

C++之继承

一&#xff0c;概念及用法 1&#xff09;概念 首先我们来了解一下官方的概念&#xff1a;继承(inheritance)机制是面向对象程序设计使代码可以复用的最重要的手段&#xff0c;它允许程序员在保持原有类特性的基础上进行扩展&#xff0c;增加功能&#xff0c;这样产生新的类&a…

【Linux学习】线程详解

目录 十八.多线程 18.1 线程与进程 18.2 内核视角看待创建线程与进程 18.3 线程优缺点总结 线程的优点&#xff1a; 线程的缺点&#xff1a; 线程的用途&#xff1a; 18.4 线程与进程的联系 十九.线程控制 19.1 POSIX线程库 19.2 线程创建 19.3 线程等待 19.4 线程终止 19.5 线…

C# OCR识别图片中的文字

1、从NuGet里面安装Spire.OCR 2、安装之后&#xff0c;找到安装路径下&#xff0c;默认生成的packages文件夹&#xff0c;复制该文件夹路径下的 6 个dll文件到程序的根目录 3、调用读取方法 OcrScanner scanner new OcrScanner(); string path "C:\1.png"; scann…

原来你也可以DDOS?

首先祝大家新年快乐 这次内容就主要是纸上谈兵&#xff08;因为无法未经试验无法保证成功&#xff09;&#xff0c;而且有关这方面的科普视频也已经有很多了。 原文地址&#xff1a;原来你也可以DDOS&#xff1f; - Pleasure的博客 下面是正文内容&#xff1a; 前言 DDOS是一…

Hive SQL编译成MapReduce任务的过程

一、 Hive 底层执行架构 1.1 Hive底层架构 1 &#xff09;用户接口&#xff1a; Client CLI &#xff08; command-line interface &#xff09;、 JDBC/ODBC(jdbc 访问 hive) 、 WEBUI &#xff08;浏览器访问 hive &#xff09; 2 &#xff09;元数据&#xff1a; Metas…

mxxWechatBot流程与原理

大家伙&#xff0c;我是雄雄&#xff0c;欢迎关注微信公众号&#xff1a;雄雄的小课堂。 免责声明&#xff1a;该工具仅供学习使用&#xff0c;禁止使用该工具从事违法活动&#xff0c;否则永久拉黑封禁账号&#xff01;&#xff01;&#xff01;本人不对任何工具的使用负责&am…

高级自定义标记功能

高级自定义标记功能 自定义标记时用户定义的标记,它可通过创建可重用的组件来尽量较少JSP中复杂、重复的业务逻辑代码。这些组件可用于其他应用程序。Javax.servlet.jsp.tagtext包定义了开发自定义标记的类和接口。您可以使用此包的类和接口创建标记处理程序,这些程序可实现带…

matlab发送串口数据,并进行串口数据头的添加,我们来看下pwm解析后并通过串口输出的效果

uintt16位的话会在上面前面加上00&#xff0c;16位的话一定是两个字节&#xff0c;一共16位的数据 如果是unint8的话就不会&#xff0c; 注意这里给的是13&#xff0c;但是现实的00 0D&#xff0c;这是大小端的问题&#xff0c;在matlanb里设置&#xff0c;我们就默认用这个模式…

面了滴滴的数据分析师(实习),几道面试题都是原题啊。。。

年前&#xff0c;技术群组织了一场数据类的技术&面试讨论会&#xff0c;邀请了一些同学分享他们的面试经历&#xff0c;讨论会会定期召开&#xff0c;如果你想加入我们的讨论群或者希望要更详细的资料&#xff0c;文末加入。 喜欢本文记得收藏、关注、点赞 。技术交流文末…

Unity类银河恶魔城学习记录7-2 P68 Setting up details of sword源代码

Alex教程每一P的教程原代码加上我自己的理解初步理解写的注释&#xff0c;可供学习Alex教程的人参考 此代码仅为较上一P有所改变的代码 【Unity教程】从0编程制作类银河恶魔城游戏_哔哩哔哩_bilibili Sword_Skill.cs using System.Collections; using System.Collections.Gen…

【数据结构】14 队列(带头结点的链式存储和顺序存储实现)

定义 队列是一个有序线性表&#xff0c;但是队列的插入、删除操作是分别在线性表的两个不同端点进行的。 设一个队列 Q ( a 1 , a 2 , . . . , a n ) Q (a_1, a_2,...,a_n) Q(a1​,a2​,...,an​)&#xff0c;那么 a 1 a_1 a1​被称为队头元素&#xff0c; a n a_n an​为队…

【实战】一、Jest 前端自动化测试框架基础入门 —— 前端要学的测试课 从Jest入门到TDD BDD双实战(一)

文章目录 一、前端要学的测试课1.前端要学的测试2.前端工程化的一部分3.前端自动化测试的例子4.前端为什么需要自动化测试&#xff1f;5.课程涵盖内容6.前置技能7.学习收获 二、Jest 前端自动化测试框架基础入门1. 自动化测试背景及原理前端自动化测试产生的背景及原理 2.前端自…

Javaweb之SpringBootWeb案例之事务进阶的详细解析

1.3 事务进阶 前面我们通过spring事务管理注解Transactional已经控制了业务层方法的事务。接下来我们要来详细的介绍一下Transactional事务管理注解的使用细节。我们这里主要介绍Transactional注解当中的两个常见的属性&#xff1a; 异常回滚的属性&#xff1a;rollbackFor 事…

springboot179基于javaweb的流浪宠物管理系统的设计与实现

简介 【毕设源码推荐 javaweb 项目】基于springbootvue 的 适用于计算机类毕业设计&#xff0c;课程设计参考与学习用途。仅供学习参考&#xff0c; 不得用于商业或者非法用途&#xff0c;否则&#xff0c;一切后果请用户自负。 看运行截图看 第五章 第四章 获取资料方式 **项…

【C++】STL之string 超详解

目录 1.string概述 2.string使用 1.构造初始化 2.成员函数 1.迭代器 2.容量操作 1.size和length 返回字符串长度 2.resize 调整字符串大小 3.capacity 获得字符串容量 4.reserve 调整容量 5.clear 清除 6.empty 判空 3.string插入、追加 、拼接 1.运算…

【MySQL】MySQL函数学习和总结

&#x1f308;个人主页: Aileen_0v0 &#x1f525;热门专栏: 华为鸿蒙系统学习|计算机网络|数据结构与算法 ​&#x1f4ab;个人格言:“没有罗马,那就自己创造罗马~” #mermaid-svg-Ny0xnYjfHqF7s3aS {font-family:"trebuchet ms",verdana,arial,sans-serif;font-siz…

【DDD】学习笔记-精炼领域分析模型

通过统一语言与“名词动词法”可以迫使团队研究问题域的词汇表&#xff0c;简单而快速地帮助我们获得初步的分析模型。但是这种方法获得的模型品质&#xff0c;受限于语言描述的写作技巧&#xff0c;统一语言的描述更多体现在是对现实世界的模型描述&#xff0c;缺乏深入精准的…