qt5之QFile读写文件功能详解

本文实例为大家分享了qt5之QFile读写文件功能的具体代码,供大家参考,具体内容如下

1、效果

读写文件用到的是QFile类,

这里,我显示文件内容用到的是 QTextEdit

2、创建打开和关闭按钮

// 打开文件
    btnOpenFile     = new QToolButton;
    btnOpenFile->setText(tr("open a file"));
    btnOpenFile->setToolTip(tr("open a file"));
    connect(btnOpenFile, SIGNAL(clicked(bool)), this, SLOT(btnOpenFileSlot()));
    btnOpenFile->setIcon(QIcon(":/res/ico/dev/open"));
    btnOpenFile->setFixedSize(80, 48);
    btnOpenFile->setIconSize(QSize(80, 48));
 
    // 关闭文件
    btnCloseFile    = new QToolButton;
    btnCloseFile->setText(tr("close file"));
    btnCloseFile->setToolTip(tr("close file"));
    connect(btnCloseFile, SIGNAL(clicked(bool)), this, SLOT(btnCloseFileSlot()));
    btnCloseFile->setIcon(QIcon(":/res/ico/dev/save"));
    btnCloseFile->setFixedSize(80, 48);
    btnCloseFile->setIconSize(QSize(80, 48));

3、打开文件

 /*
       getOpenFileName函数说明
       函数原形: QStringList QFileDialog::getOpenFileNames(
       QWidget * parent = 0,
       const QString & caption = QString(),    //  打开文件对话框的标题
       const QString & dir = QString(),            //  查找目录
       const QString & filter = QString(),     //  设置需要过滤的文件格式
       QString * selectedFilter = 0,
       Options options = 0) [static]
       */
       //---获取文件名;
    QString qexeFullPath    = QDir::currentPath();
    QString fileName        = QFileDialog :: getOpenFileName(this, tr("选择一个文件"), qexeFullPath, "*.txt");
 
    // 1、若没有选择文件
    if (true                == fileName.isEmpty())
    {
        // 什么也不做
        return;
    }
 
    // 2、选择了文件,打开新选择的文件前,检查先前的文件
    CheckFileClose();
 
    // 3、 打开文件,显示文件内容
    GetFileContext(fileName);

CheckFileClose函数:

// 1、若已经打开文件,且文件内容发生变化,此时又打开文件,则提示是否保存先前的文件
    bool fileIsOpen         = fileReadWrite->isOpen();
    // 1.1 若打开了, 没有关闭
    if (true                == fileIsOpen)
    {
        // 1.1.1 若文件内容发生变化
        bool isChanged      = GetTextEditContentIsChanged();
        if (true            == isChanged)
        {
            int  okcancel   = QMessageBox::information(this, tr("mention"), tr("dev tab, textEdit's content has changed, do U wanna save ?"), QMessageBox::Ok | QMessageBox::Cancel);
 
            // 点击了是,则需要保存文件
            if (QMessageBox::Ok == okcancel)
            {
                SaveFile();
            }
 
            // 点击了否,什么也不做
            else
            {
 
            }
        }
 
        // 1.1.2 文件内容没有变化
        else
        {
            // 什么也不做
        }
 
        // 1.1.3 关闭文件
        fileReadWrite->close();
 
        // 1.1.4 清空显示内容
        textEditShowFile->clear();
 
        // 1.1.5 设置为只读
        textEditShowFile->setReadOnly(true);
 
        // 1.1.6 清空文件内容缓冲区
        textEditContent = QString("");
 
        // 1.1.6 清除文件名
        lineEditFileName->setText("");
    }
    // 1.2文件没有打开
    else
    {
        // 文件没有打开,什么也不做
 
    }

GetFileContext函数代码:

// 之前已经保证文件关闭了,现在重新打开文件
 
    // 2、 打开文件
    fileReadWrite->setFileName(openNewFileName);
    bool openFlag           = fileReadWrite->open(QIODevice ::ReadWrite | QIODevice ::Text);
    // 若打开失败
    if (false               == openFlag)
    {
        QMessageBox::critical(this, tr("warning"),  tr("open file err"));
        return;
    }
 
    // 保存文件名
    openFileName            = openNewFileName;
 
    // 3.1 删除原有的内容
    textEditShowFile->clear();
 
    // 3.2 显示文件内容
    QTextStream textStream(fileReadWrite);
    while (!textStream.atEnd())
    {
        //---QtextEdit按行显示文件内容
        textEditShowFile->append(textStream.readLine());
    }
 
    // 5、解除只读
    textEditShowFile->setReadOnly(false);
 
    // 6、临时保存当前打开文件内容
    textEditContent = textEditShowFile->toPlainText();
 
    // 7、显示打开的文件名
    lineEditFileName->setText(openFileName);

4、关闭按钮

下面做了关闭文件前的一些检查

// 1、若已经打开文件,且文件内容发生变化,此时又打开文件,则提示是否保存先前的文件
    bool fileIsOpen         = fileReadWrite->isOpen();
    // 1.1 若打开了, 没有关闭
    if (true                == fileIsOpen)
    {
        // 1.1.1 若文件内容发生变化
        bool isChanged      = GetTextEditContentIsChanged();
        if (true            == isChanged)
        {
            int  okcancel   = QMessageBox::information(this, tr("mention"), tr("dev tab, textEdit's content has changed, do U wanna save ?"), QMessageBox::Ok | QMessageBox::Cancel);
 
            // 点击了是,则需要保存文件
            if (QMessageBox::Ok == okcancel)
            {
                SaveFile();
            }
 
            // 点击了否,什么也不做
            else
            {
 
            }
        }
 
        // 1.1.2 文件内容没有变化
        else
        {
            // 什么也不做
        }
 
        // 1.1.3 关闭文件
        fileReadWrite->close();
 
        // 1.1.4 清空显示内容
        textEditShowFile->clear();
 
        // 1.1.5 设置为只读
        textEditShowFile->setReadOnly(true);
 
        // 1.1.6 清空文件内容缓冲区
        textEditContent = QString("");
 
        // 1.1.6 清除文件名
        lineEditFileName->setText("");
    }
    // 1.2文件没有打开
    else
    {
        // 文件没有打开,什么也不做
 
    }

其中,SaveFile函数代码如下:

 bool isOpen = fileReadWrite->isOpen();
    // 若文件没有打开
    if (false   == isOpen)
    {
        return;
    }
 
    // 关闭文件
    fileReadWrite->close();
 
    fileReadWrite->open(QIODevice ::WriteOnly | QIODevice ::Text | QIODevice::Truncate);
    QString writeStr    = textEditShowFile->toPlainText();
#ifdef QT_DEBUG
    qDebug() << "文件内容 = " << writeStr;
#endif
 
    // 文件打开了,现在关闭
    QTextStream outFile(fileReadWrite);
    outFile << writeStr << endl;
    outFile.flush();

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • Qt基础开发之Qt文件操作类QFile读写文件的详细方法与实例及QDataStream的使用方法

    Qt文件操作类QFile简介 Qt中使用QFile类来操作文件的输入/输出.继承至QIODevice,QIODevice类是输入/输出设备的基类, 为设备提供了公共实现和抽象接口用于读写块数据.QIODevice又继承至QObject. 1.使用QFile类打开文件 QFile的构造函数 QFile(const QString &name) //传入一个文件路径 构造完成后,并没有打开文件,需要使用QFile::open函数来打开文件 [virtual] bool QFile::open(Ope

  • QT中如何读写ini配置文件

    如图1所示,我们需要在QT界面中实现手动读取参数存放的位置,那么我们该如何做呢? 方法:读取ini格式的配置文件,实现路径的写入与读取. 第一步:界面构造函数中,初始化一个Config.ini文件 //初始化一个.ini配置文件 //qApp是QT系统自带的,可以直接使用 QString iniFilePath=qApp->applicationDirPath()+"/Config.ini"; //如果不存在Config.ini,便生成一个Config.ini.如果已经存在了,则

  • C/C++ Qt 基本文件读写的基本使用(2种实现)

    目录 QT基本文件读写 QTextStream 实现流读写 文件的读写是很多应用程序具有的功能,甚至某些应用程序就是围绕着某一种格式文件的处 理而开发的,所以文件读写是应用程序开发的一个基本功能. Qt文件操作有两种方式,第一种使用QFile类的IODevice读写功能直接读写,第二种是利用 QFile和QTextStream结合起来,用流的方式进行文件读写. 第一种,利用QFile中的相关函数,实现对文件的读写操作,QFile会调用IODevice设备,从而实现文件读写. QT基本文件读写 通

  • qt5之QFile读写文件功能详解

    本文实例为大家分享了qt5之QFile读写文件功能的具体代码,供大家参考,具体内容如下 1.效果 读写文件用到的是QFile类, 这里,我显示文件内容用到的是 QTextEdit 2.创建打开和关闭按钮 // 打开文件     btnOpenFile     = new QToolButton;     btnOpenFile->setText(tr("open a file"));     btnOpenFile->setToolTip(tr("open a f

  • 对Python之gzip文件读写的方法详解

    gzip文件读写的时候需要用到Python的gzip模块. 具体使用如下: # -*- coding: utf-8 -*- import gzip # 写文件 f_out = gzip.open("xxx.gz", "wb") # 读文件 # f_in = gzip.open("xxx.gz", "rb") for line in open("yyy.txt", "rb"): f_out

  • Python csv文件的读写操作实例详解

    这篇文章主要介绍了Python csv文件的读写操作实例详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 python内置了csv模块,用它可以方便的操作csv文件. 1.写文件 (1)写文件的方法一 import csv # open 打开文件有多种模式,下面是常见的4种 # r:读数据,默认模式 # w:写数据,如果已有数据则会先清空 # a:向文件末尾追加数据 # x : 写数据,如果文件已存在则失败 # 第2至4种模式如果第一个参数指

  • C++头文件algorithm中的函数功能详解

    目录 1. 不修改内容的序列操作 (1)all_of (2)any_of (3)none_of (6)find_if (7)find_if_not (8)find_end (10)adjacent_find (12)count_if (15)is_permutation (16)search 2. 修改内容的序列操作 (1)copy (2)copy_n (3)copy_if (4)copy_backward (5)move (6)move_backward (7)swap (8)swap_ran

  • Python 工具类实现大文件断点续传功能详解

    依赖 os.sys.requests 工具代码 废话不多说,上代码. #!/usr/bin/env python3 # -*- coding: utf-8 -*- """ Created on Sat Oct 23 13:54:39 2021 @author: huyi """ import os import sys import requests def download(url, file_path): # 重试计数 count = 0 #

  • SpringBoot+微信小程序实现文件上传与下载功能详解

    目录 1.文件上传 1.1 后端部分 1.2 小程序前端部分 1.3 实现效果 2.文件下载 2.1 后端部分 2.2 小程序前端部分 2.3 实现效果 1.文件上传 1.1 后端部分 1.1.1 引入Apache Commons FIleUpload组件依赖 <!--文件上传与下载相关的依赖--> <dependency> <groupId>commons-fileupload</groupId> <artifactId>commons-fil

  • Python文件读写open函数详解

    前言: open()函数的定义:def open(file, mode='r', buffering=None, encoding=None, errors=None, newline=None, closefd=True) 常用的参数有 file.mode.encoding file是文件名称, mode是文件的打开方式.encoding是文件编码格式 mode常见的有 只读模式®.写入模式(w).追加模式(a).读写模式(r+/w+/a+) r+要求文件必须存在:锚点置于末行末位字符处 w+

  • Go语言文件读写操作案例详解

    目录 基本介绍 文件基本操作 读操作 写操作 写操作案例 查看文件或目录是否存在 拷贝文件 基本介绍 文件,对我们并不陌生,文件是数据源(保存数据的地方)的 一种 输入流和输出流 文件在程序中是以流的形式来操作的 流:数据在数据源(文件)和程序(内存)之间经历的路径 输入流:数据从文件到内存的路径 输出流:数据从内存到文件的路径 os.File封装所有文件相关操作,File是一个结构体 文件基本操作 读操作 package main import ( "bufio" "fmt

  • Mysql主从复制与读写分离图文详解

    文章思维导图 为什么使用主从复制.读写分离 主从复制.读写分离一般是一起使用的.目的很简单,就是为了提高数据库的并发性能. 你想,假设是单机,读写都在一台MySQL上面完成,性能肯定不高. 如果有三台MySQL,一台mater只负责写操作,两台salve只负责读操作,性能不就能大大提高了吗? 所以主从复制.读写分离就是为了数据库能支持更大的并发. 随着业务量的扩展.如果是单机部署的MySQL,会导致I/O频率过高. 采用主从复制.读写分离可以提高数据库的可用性. 主从复制的原理 ①当Master

  • Java IO流之原理分类与节点流文件操作详解

    目录 IO流简介 IO流原理 流的分类 IO 流体系 节点流和处理流 节点流操作 IO流简介 I/O是Input/Output的缩写, I/O技术是非常实用的技术,用于处理设备之间的数据传输.如读/写文件,网络通讯等. Java程序中,对于数据的输入/输出操作以"流(stream)" 的方式进行. java.io包下提供了各种"流"类和接口,用以获取不同种类的数据,并通过标准的方法输入或输出数据. IO流原理 输入input:读取外部数据(磁盘.光盘等存储设备的数据

随机推荐