【嵌入式Qt开发入门】如何使用Qt进行文本读写——QFile读写文本

这篇具有很好参考价值的文章主要介绍了【嵌入式Qt开发入门】如何使用Qt进行文本读写——QFile读写文本。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

        在很多时候我们需要读写文本文件进行读写,比如写个 Mp3 音乐播放器需要读 Mp3 歌词里的文本,比如修改了一个 txt 文件后保存,就需要对这个文件进行读写操作。本文介绍简单的文本文件读写,内容精简,让大家了解文本读写的基本操作。

QFile 读写文本

        QFile 类提供了读取和写入文件的接口。在嵌入式里如果需要读写文件,最简单的方法就是 用 Qfile,例如利用QFile来读写 Linux 下的字符设备(可把字符设备当作一个文本处理,linux 下一切皆文件),虽然只是写‘0’或‘1’,但也是对文件(文本)的读写了。

        QFile 是一个读写文本、二进制文件和资源的 I/O 设备。QFile 可以自己使用,也可以更方便地与 QTextStream 或 QDataStream 一起使用。

        文件名通常在构造函数中传递,但它可以在任何时候使用 setFileName()设置。不支持使用其他分隔符(例如'\')。所以在 Windows、Linux 或者 Mac 里文件的路径都是用'/'。不能看到 Windows 的路径是'\',我们就可以在写入的文件路径里添加这个'\'。不管操作系统是什么,QFile 的文件分隔符都是'/'。

        可以使用 exists()检查文件是否存在,并使用 remove()删除文件。(更高级的文件系统相关操 作由 QFileInfo 和 QDir 提供)用 open()打开文件,用 close()关闭文件,用 flush()刷新文件。通常使用 QDataStream 或 QTextStream 读写数据,但也可以调用 QIODevice 继承的函数 read()、 readLine()、readAll()、write()。QFile 还继承 getChar()、putChar()和 ungetChar(),它们一次只处 理一个字符。文件的大小由 size()返回。可以使用 pos()获取当前文件位置,也可以使用 seek() 移动到新的文件位置。如果已经到达文件的末尾,则 atEnd()返回 true。

        QFile::open()函数打开文件时需要传递 QIODevice::OpenModeFlag 枚举类型的参数,决定 文件以什么方式打开,QIODevice::OpenModeFlag 类型的主要取值如下:

  • QIODevice::ReadOnly:以只读方式打开文件,用于载入文件。
  • QIODevice::WriteOnly:以只写方式打开文件,用于保存文件。
  • QIODevice::ReadWrite:以读写方式打开。
  • QIODevice::Append:以添加模式打开,新写入文件的数据添加到文件尾部。
  • QIODevice::Truncate:以截取方式打开文件,文件原有的内容全部被删除。
  • QIODevice::Text:以文本方式打开文件,读取时“\n”被自动翻译为换行符,写入时字符 串结束符会自动翻译为系统平台的编码,如 Windows 平台下是“\r\n”。

        这些取值可以组合,例如 QIODevice::ReadOnly | QIODevice::Text 表示以只读和文本方式打开文件。

        使用 QFile 对一个文本文件的操作流程是以下这样的。

【嵌入式Qt开发入门】如何使用Qt进行文本读写——QFile读写文本,Linux,Qt,qt,开发语言,linux,c++

应用实例

        创建项目qfile_test,在头文件“mainwindow.h”具体代码如下。

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QTextEdit>
#include <QFile>
#include <QVBoxLayout>
#include <QHBoxLayout>
#include <QPushButton>

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow();
private:
    /* 用于读取文件后显示 */
    QTextEdit *textEdit;
    /* QFile 类型对象 */
    QFile file;
    /* 布局 */
    QHBoxLayout *hBoxLayout;
    QVBoxLayout *vBoxLayout;
    QWidget *hWidget;
    QWidget *vWidget;
    /* 打开文件按钮 */
    QPushButton *openPushButton;
    /* 关闭文件按钮 */
    QPushButton *clsoePushButton;
private slots:
    /* 打开文本文件 */
    bool openFile();
    /* 关闭文本文件 */
    void closeFile();
};
#endif // MAINWINDOW_H

        在源文件“mainwindow.cpp”具体代码如下。

#include "mainwindow.h"
#include <QFileDialog>
#include <QDebug>

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
{
    /* 设置窗口的位置与大小 */
    this->setGeometry(0, 0, 800, 480);
    /* 布局设置 */
    textEdit = new QTextEdit();
    vBoxLayout = new QVBoxLayout();
    hBoxLayout = new QHBoxLayout();
    vWidget = new QWidget();
    hWidget = new QWidget();
    openPushButton = new QPushButton();
    closePushButton = new QPushButton();
    /* 设置两个按钮的大小 */
    openPushButton->setMinimumHeight(50);
    openPushButton->setMaximumWidth(120);
    closePushButton->setMinimumHeight(50);
    closePushButton->setMaximumWidth(120);
    /* 设置两个按钮的文本 */
    openPushButton->setText("打开");
    closePushButton->setText("关闭");
    /* 设置关闭按钮为不可用属性,需要打开文件才设置为可用属性 */
    closePushButton->setEnabled(false);
    /* 水平布局 */
    hBoxLayout->addWidget(openPushButton);
    hBoxLayout->addWidget(closePushButton);
    hWidget->setLayout(hBoxLayout);
    /* 垂直布局 */
    vBoxLayout->addWidget(textEdit);
    vBoxLayout->addWidget(hWidget);
    vWidget->setLayout(vBoxLayout);
    /* 居中 */
    setCentralWidget(vWidget);
    /* 信号槽连接 */
    connect(openPushButton, SIGNAL(clicked()), this, SLOT(openFile()));
    connect(closePushButton, SIGNAL(clicked()), this, SLOT(closeFile()));
}

MainWindow::~MainWindow()
{
}

bool MainWindow::openFile(){
    /* 获取文件的路径 */
    QString fileName = QFileDialog::getOpenFileName(this);
    /* 指向文件 */
    file.setFileName(fileName);
    /* 判断文件是否存在 */
    if(!file.exists())
        return false;
    /* 以读写的方式打开 */
    if(!file.open(QIODevice::ReadOnly | QIODevice::Text))
        return false;
    /* 读取文本到 textEdit */
    textEdit->setPlainText(file.readAll());
    /* 设置打开按钮不可用,需要关闭再打开 */
    openPushButton->setEnabled(false);
    /* 设置关闭按钮为可用属性 */
    closePushButton->setEnabled(true);
    /* 关闭文件 */
    file.close();
    return true;
}
void MainWindow::closeFile(){
    /* 检测打开按钮是否可用,不可用时,说明已经打开了文件 */
    if(!openPushButton->isEnabled()){
        /* 获取 textEdit 的文本内容 */
        QString str = textEdit->toPlainText();
        /* 以只读的方式打开 */
        if(!file.open(QIODevice::WriteOnly | QIODevice::Text))
               return;
        /* 转换为字节数组 */
        QByteArray strBytes = str.toUtf8();
        /* 写入文件 */
        file.write(strBytes, strBytes.length());
        /* 清空 textEdit 的显示内容 */
        textEdit->clear();
        /* 关闭文件 */
        file.close();
        /* 重新设置打开和关闭按钮的属性 */
        openPushButton->setEnabled(true);
        closePushButton->setEnabled(false);
    }
}

程序运行效果

        点击打开 

【嵌入式Qt开发入门】如何使用Qt进行文本读写——QFile读写文本,Linux,Qt,qt,开发语言,linux,c++

         调用系统打开文件的窗口。选择一个文本文件。

【嵌入式Qt开发入门】如何使用Qt进行文本读写——QFile读写文本,Linux,Qt,qt,开发语言,linux,c++

         打开后,文本的内容如下,可以进行修改,修改后点击关闭就会写入到此文件里。本例仅仅用两个按钮和一个文本编辑框完成,内容简洁易懂。但是在实际项目里不是用 QPushButton 来做打开文件和关闭文件的,一般设计于在菜单栏里用 QAction 来做。包括添加复制、粘贴、 另存为、关闭、等等。可以仿照 Windows 里的记事本,用 Qt 写一个类似的软件完全可以。

【嵌入式Qt开发入门】如何使用Qt进行文本读写——QFile读写文本,Linux,Qt,qt,开发语言,linux,c++

 文章来源地址https://www.toymoban.com/news/detail-525835.html

到了这里,关于【嵌入式Qt开发入门】如何使用Qt进行文本读写——QFile读写文本的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【嵌入式Qt开发入门】初识Qt——Linux下安装Qt

            Qt 是一个跨平台的 C++开发库。主要用来开发图形用户界面(Graphical User Interface,简 称 GUI)程序。         Qt 虽然经常被当做一个 GUI 库,用来开发图形界面应用程序,但这并不是 Qt 的全部; Qt 除了可以绘制漂亮的界面(包括控件、布局、交互),还包含很多

    2024年02月16日
    浏览(32)
  • 【嵌入式Qt开发入门】在Ubuntu下编写C++

            在 Ubuntu 上面编写 C++,本文内容主要介绍在 Ubuntu 在终端窗口下使用 vi/vim 编辑一 个 C++源文件。通过编写最简单的示例“Hello,World!”。带领大家学习如何在 Ubuntu 终端下编辑和编译 C++。这里要求大家会在 Ubuntu 上使用 vi/vim,也就是要求大家有一点 Ubuntu 入门的基

    2024年02月11日
    浏览(29)
  • 使用Yocto进行嵌入式Linux开发3 Toaster

    我们已经知道了如何在Poky中使用BitBake构建图像image,那么我们将学习如何使用Toaster完成同样的操作。 Toaster是一个用于配置和运行构建的Web接口。它与BitBake和Poky构建系统通信,以管理和收集有关构建、软件包和镜像的信息。 使用Toaster的两种方法: 本地 可以将Toaster作为本

    2024年02月08日
    浏览(28)
  • 嵌入式开发--CubeMX使用入门教程

    嵌入式开发–CubeMX使用入门教程 传统的单片机开发时,需要针对片上外设做各种初始化的工作,相当麻烦。 CubeMX是ST公司出品的一款图形化代码生成工具,通过图形化界面,可以非常直观的配置好各种片上外设,时钟,中断,DMA等等各种设备的参数,然后CubeMX可以直接生成初

    2024年04月12日
    浏览(49)
  • 使用Yocto进行嵌入式Linux开发1 Yocto简介

    Yocto项目是Linux基金会的一个工作组,它是一个开源协作项目,帮助开发人员创建基于Linux的定制系统,这些系统专为嵌入式产品而设计,与产品的硬件架构无关。Yocto项目提供了一个灵活的工具集和开发环境,使世界各地的嵌入式设备开发人员能够通过共享技术、软件栈、配

    2024年02月09日
    浏览(30)
  • 使用VSCode clangd插件进行linux内核代码阅读和嵌入式开发

    在进行 Linux 内核代码阅读和嵌入式开发时,选择合适的开发工具至关重要。VSCode 是一个流行的跨平台编辑器,并且它的扩展生态系统非常强大。在这篇博客中,我们将介绍如何使用 VSCode Clangd 插件来提高 Linux 内核代码的阅读和嵌入式开发效率。 Clangd 是一个基于 Clang 的语言

    2024年02月09日
    浏览(35)
  • 使用Yocto进行嵌入式Linux开发2 第一个基于Poky的系统

    Ubuntu: Fedora 在我们的开发主机系统上安装了所需的软件包后,我们可以使用 Git 下载当前 LTS 版本的 Poky 源代码,命令如下: 下载完成后,poky 目录中的内容如下: 在poky目录中存在oe-init-build-env脚本,用于设置构建环境。 这里,[build-directory] 是一可选参数,用于指定配置环境

    2024年02月08日
    浏览(33)
  • 嵌入式开发板qt gdb调试

    1) 启动 gdbserver ssh 或者 telnet 登陆扬创平板 192.168.0.253, 进入命令行执行如下: chmod 777 /home/HelloWorld (2) 打 开 QTcreator-Debug-StartDebugging-Attach to Running Debug Server 进行如下设置,设置监听端口10000. 点击上图中的按钮,由于按钮中的函数设置了断点,则跳到断点,界面如下

    2024年02月04日
    浏览(80)
  • 嵌入式Qt 开发一个音乐播放器

    上篇文章:RK3568源码编译与交叉编译环境搭建,进行了OK3568开发板软件开发环境搭建,通过编译RK3568的源码,可以得到Qt开发的交叉编译相关工具。 本篇,就来在搭建好的软件开发中,进行Qt软件的开发测试。由于Qt是支持跨平台的,因此本篇的音乐播放器,先在Windows上编写

    2024年02月02日
    浏览(32)
  • 嵌入式QT- QT使用MQTT

    目录 一、MQTT介绍 二、MQTT概念   2.1 订阅(Subscribtion)   2.2 会话(Session)   2.3 主题名(Topic Name)    2.4 主题筛选器(Topic Filter)    2.5 消息订阅 三、MQTT中的角色 3.1 客户端 3.2 服务器 四、X86平台安装mosquitto 4.1 下载 mosquitto 服务器 4.2 下载 mosquitto 客户端 4.3 mosquitto 命令

    2024年02月13日
    浏览(39)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包