qt开发-15_QFile

news2024/11/19 18:29:57

QFile 类提供了读取和写入文件的接口。在嵌入式里如果需要读写文件,最简单的方法就是
用 Qfile。
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 表示以只读和文本方式
打开文件。

我们创建一个项目工程文件打开 ui 界面添加 textedit 和两个按钮,两个按钮水平布局然后和 textedit 组成垂直布局。

在 widget.h 添加 QFILE 头文件,声明 QFIle file。

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include <QFile>

QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE

class Widget : public QWidget
{
    Q_OBJECT

public:
    Widget(QWidget *parent = nullptr);
    ~Widget();

private slots:
    void on_pushButton_clicked();

    void on_pushButton_2_clicked();

private:
    Ui::Widget *ui;
    QFile file;
};
#endif // WIDGET_H

进入 ui 界面给按钮添加 点击槽函数,在槽函数里面添加:


void Widget::on_pushButton_clicked()
{
    QString fileName = QFileDialog::getOpenFileName(this, "选择文本", "/mnt/hgfs/qt");
    qDebug() << fileName << endl;

    // 设置要打开的文件
    file.setFileName(fileName);

    // 打开文件
    if (!file.open(QIODevice::ReadOnly)) {
        qDebug() << "文本打开失败" << endl;
        return;
    }

    // QString的构造函数自动转换
    ui->textEdit->setPlainText(file.readAll());

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

点击另外一个按钮添加槽函数:

void Widget::on_pushButton_2_clicked()
{
    if (file.fileName().isEmpty())
        return;

    // 打开文件
    if (!file.open(QIODevice::ReadWrite)) {
        qDebug() << "文本打开失败" << endl;
        return;
    }

    // 写文件
    file.write(ui->textEdit->toPlainText().toUtf8());

    // 关闭
    file.close();

    ui->textEdit->clear();
}

效果:

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

海云安参编《数字安全蓝皮书 》正式发布并入选《2024中国数字安全新质百强》荣膺“先行者”

近日&#xff0c;国内数字化产业第三方调研与咨询机构数世咨询正式发布了《2024中国数字安全新质百强》&#xff08;以下简称百强报告&#xff09;。海云安凭借在开发安全领域的技术创新力及市场影响力入选百强报告“新质百强先行者” 本次报告&#xff0c;数世咨询经过对国内8…

获取个人免费版Ubuntu Pro

首先上官网地址&#xff1a;Ubuntu Pro | Ubuntu 点击页面中的"Get Ubuntu Pro now" 将用途选为“Myself”&#xff0c;在此页面中Ubuntu说明了该版本只面向个人开发者&#xff0c;且最终只允许5台设备免费使用&#xff1b;因而部署设备的抉择就不得不慎重考虑了&am…

Java | Leetcode Java题解之第200题岛屿数量

题目&#xff1a; 题解&#xff1a; class Solution {void dfs(char[][] grid, int r, int c) {int nr grid.length;int nc grid[0].length;if (r < 0 || c < 0 || r > nr || c > nc || grid[r][c] 0) {return;}grid[r][c] 0;dfs(grid, r - 1, c);dfs(grid, r…

设计模式原则——接口隔离原则

设计模式原则 设计模式示例代码库地址&#xff1a; https://gitee.com/Jasonpupil/designPatterns 接口隔离原则 要求程序员尽量将臃肿庞大的接口拆分为更小的和更具体的接口&#xff0c;让接口中只包含客户感兴趣的方法接口隔离原则的目标是降低类或模块之间的耦合度&…

WIN版-苹果和平精英画质帧率优化教程

一、视频教程&#xff1a; 想要视频的联系博主 二、图文教程&#xff1a; 前置说明&#xff1a;不按教程&#xff0c;会导致修改不成功&#xff0c;或者设备里面内容丢失。请务必按教程操作&#xff01;&#xff01; 准备工作&#xff08;这部分是在要改的设备上操作&#x…

数据结构--栈(图文)

栈是一种基本的抽象数据类型&#xff0c;具有后进先出的特点。在栈这种数据结构中&#xff0c;元素只能在一端进行插入和删除操作&#xff0c;这一端被称为栈顶&#xff08;Top&#xff09;&#xff0c;而另一端则称为栈底&#xff08;Bottom&#xff09;。 栈的概念及特点 栈…

C语言单链表的算法之插入节点

一&#xff1a;访问各个节点中的数据 &#xff08;1&#xff09;访问链表中的各个节点的有效数据&#xff0c;这个访问必须注意不能使用p、p1、p2&#xff0c;而只能使用phead &#xff08;2&#xff09;只能用头指针不能用各个节点自己的指针。因为在实际当中我们保存链表的时…

怎么使用python进行整除取余求幂

怎么使用python进行整除取余求幂&#xff1f; 整除法是//&#xff0c;称为地板除&#xff0c;两个整数的除法仍然是整数。 10//33 3 求模运算是%&#xff0c;相当于mod&#xff0c;也就是计算除法的余数。 5%2 1 求幂运算使用两个连续的*&#xff0c;幂运算符比取反的优先级高…

操作系统面试篇一

很多读者抱怨计算操作系统的知识点比较繁杂&#xff0c;自己也没有多少耐心去看&#xff0c;但是面试的时候又经常会遇到。所以&#xff0c;我带着我整理好的操作系统的常见问题来啦&#xff01;这篇文章总结了一些我觉得比较重要的操作系统相关的问题比如 用户态和内核态、系统…

css3实现水纹进度条

其实有一个mask-image属性 挺有意思&#xff0c;在元素上面实现遮罩层的效果&#xff0c;不过这玩意有些兼容性问题 需要处理&#xff0c;所以单纯可以通过渐变色的方式来实现 同时加上动画效果 .jianbian {width: 100%;height: 16px;background-color: #eee;display: flex;bor…

【shell 学习一】shell执行方式以及变量(自定义变量、整数运算)定义

1.shell执行方式 测试脚本 vim file1 echo hello 2024 read -p 请输入 name echao hh,$name执行1 bash file1执行2 sh file1执行3 . file1执行4 source file11和2的方式&#xff0c;是子shell 3和4的方式&#xff0c;是本shell bash是进入新的命令 这时候退出edit是退出这个新…

docker部署FastDFS整合Springboot

文章目录 1、FastDFS是什么&#xff1f;2、搭建docker环境3、部署fastdfs4、整合springboot5、接口测试参考文章 1、FastDFS是什么&#xff1f; FastDFS是一个开源的轻量级分布式文件系统&#xff0c;它对文件进行管理&#xff0c;功能包括&#xff1a;文件存储、文件同步、文…

树莓派4B_OpenCv学习笔记13:OpenCv颜色追踪_程序手动调试HSV色彩空间_检测圆

今日继续学习树莓派4B 4G&#xff1a;&#xff08;Raspberry Pi&#xff0c;简称RPi或RasPi&#xff09; 本人所用树莓派4B 装载的系统与版本如下: 版本可用命令 (lsb_release -a) 查询: Opencv 版本是4.5.1&#xff1a; OpenCv颜色追踪_程序手动调试HSV色彩空间_检测灰度图中的…

Windows USB设备驱动开发 - 常见概念的解释

我们听到许多 USB 术语几乎交替抛出。 它们都是什么意思&#xff1f;假设我们看到类似 “多亏了 USB 3.0&#xff0c;我可以将 SuperSpeed U 盘连接到电脑的 xHCI 主机控制器&#xff0c;并更快地复制文件。” 让我们了解该句子中的 USB 术语。 USB 3.0、USB 2.0 和 USB 1.0 请…

C语言 | Leetcode C语言题解之第200题岛屿数量

题目&#xff1a; 题解&#xff1a; void cleanLand(char** grid, int gridSize, int ColSize,int row,int column) {if(grid[row][column] 1){//不等于1则清零grid[row][column] 0;}else{//不等于1则返回return ;}int newRow;int newColumn;//上if(row ! 0) //还能上{ne…

关于 AD21导入电子元器件放置“3D体”STEP模型失去3D纹理贴图 的解决方法

若该文为原创文章&#xff0c;转载请注明原文出处 本文章博客地址&#xff1a;https://hpzwl.blog.csdn.net/article/details/139969415 长沙红胖子Qt&#xff08;长沙创微智科&#xff09;博文大全&#xff1a;开发技术集合&#xff08;包含Qt实用技术、树莓派、三维、OpenCV…

java Logback 日志格式参数详细说明

logback 打印日志格式介绍官网 Springboot [日志管理LogBack] java Logback 日志格式参数详细说明 打印日志格式&#xff1a; <property name"LOG_PATTERN" value"[${APP_NAME} ${SERVER_IP}:${SERVER_PORT}] %d{yyyy-MM-dd HH:mm:ss.SSS} %level ${PID} …

【项目实训】面试经验总结页面编写(前期探索)

首先&#xff0c;我们想尝试编写和chatchat项目兼容的页面展示部分&#xff0c;在编写成功之后&#xff0c;由于streamlit库是一个很强大的python库&#xff0c;比较死板&#xff0c;做出的页面并不尽如人意&#xff0c;于是我们放弃了这种方法。但这也是探索前端页面展示形式的…

【Android面试八股文】Framework面试:ThreadLocal的原理,以及在Looper是如何应用的?

文章目录 ThreadLocal的原理,以及在Looper是如何应用的?ThreadLocal 是什么ThreadLocalMap是什么?ThreadLocal在Looper中的应用**总结**扩展阅读ThreadLocal的原理,以及在Looper是如何应用的? ThreadLocal 可以把一个对象保存在指定的线程中,对象保存后,只能在指定线程…

找不到模块“@/stores/xxx”或其相应的类型声明。

找不到模块“/stores/xxx”或其相应的类型声明。 问题图示 在 Vue3 项目中&#xff0c;特别是在使用 TypeScript 时&#xff0c;/ 符号通常是用来代表项目根目录的别名。例如&#xff0c;/stores/xxx 可能是指向你项目中的某个 store 文件或目录。出现找不到模块的错误通常是由…