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

QT 的文件

QT 和C++、linux 一样,也有自带的文件系统.

它的操作和C++、c差不多,不过也需要我们来了解一下。

输入输出设备类

QObject 有一个子类,名为 QIODevice 类,如其名字,该类是管理所有输入输出设备的类。

比如文件、网络套接字、蓝牙等,而文件类也是其所管理的类之一。

  •  QFile 类 : 管理文件的类,包括文件的读、写,可以用该类管理任意格式的文件
  • QSaveFile : 用于安全保存文件的类,即当用QSaveFile 保存文件时,它会先将数据写入一个临时文件,成功写完后才将文件写入最终的文件,防止写入途中出错,导致旧文件和新文件都消失
  • QTemporaryFile 类 : 用于创建临时文件的类,使用该类创建一个对象时也会创建一个临时文件,对象销毁时文件也销毁
  • QTcpSocket / QUdpSocket : 分别实现了 TCP 和 UDP 的类
  • QSerialPort :实现了串口通信的类,实现计算机与串口设备的通信
  • QBluetoothScoket : 用于蓝牙通信的类,可以用于实现手机蓝牙的通信
  • QProcess :用于启动外部程序,并且可以传递参数
  • QBuffer : 以QByteArray 的对象作为缓冲区,将该对象当做一个 IO 设备。

QFile 类

该类提供了文件的读、写等方法。

读方法:

  • read() 
  • readLine()
  • readAll()

写方法:

  • write()
  • writeData()

关闭文件

  • close()

打开文件

  • open(openMode)

 和C++类似,想要读或者写一个文件需要先打开文件,而打开文件需要跟上打开文件的方式。

Qt 也设置了文件的打开方式。

  • QIODevice::NotOpen : 没有打开设备
  • QIODevice::ReadOnly : 以只读方式打开设备
  • QIODevice::WriteOnly : 以写方式打开设备
  • QIODevice::ReadWrite : 以读写方式打开设备
  • QIODevice::Append : 以追加的方式打开设备,将数据写到文件末尾
  • QIODevice::Truncate : 每次打开文件重写文件内容,原内容被删除
  • QIODevice::Text : 在读文件时,行尾终止符变为 '\n',而写文件时,行尾终止符则会转化为本地编码.
  • QIODevice::Unbufferd : 无缓冲形式打开文件,绕过设备中的缓冲区
  • QIODevice::NewOnly : 文件存在打开失败,不存在则创建

接着我们来用 QFile 类来实现一个简单的记事本程序。


首先,在 .h 文件中添加需要的槽函数和成员。 

然后在 QMainWindow.cpp 的构造函数中,设置菜单栏和输入框,并且连接好信号和槽函数。 

 

第一个槽函数的作用是打开文件。 

 第二个槽函数的作用是保存文件

运行之后,我们在输入框输入文本,并且在菜单栏中选中保存操作。 

 

由于我们设置的保存文件的路径为程序运行的路径,因此保存的文件在构建文件夹中。

我们设置想要保存在哪个文件中之后,再去对应文件夹中查看即可。

可以看到文件确实保存在构建文件夹中了。 

内容也是没问题的。 

 

然后通过打开菜单栏中的打开文件操作。

 选中 hello.txt 文件后,发现内容也正确读取出来了。

 QFileInfo类

该类是 Qt 一个用于提供文件信息的类,可以通过该类提供的函数查看文件的后缀、类型、名称等属性。

有很多方法,使用的时候可以通过QT文档去搜索,不用死记硬背。

总结

文件类是每个语言都需要使用的类,C++的文件流、linux 的 open、read 、write 、C语言的 fopen、fread等,都是各个语言针对文件所设计的函数,QT 也不例外,希望本文能够对大家有所帮助。 

相关文章:

  • Linux网络编程:epoll
  • AI导航网
  • 【ArcGISProSDK】OpenItemDialog打开文件对话框
  • python基础面试题(其二)
  • openh264 帧间预测编码过程源码分析
  • 《纪元 1800》好玩吗? 苹果电脑能玩《纪元 1800》吗?
  • Vue路由守卫的使用
  • GPT3.5的PPO目标函数怎么来的:From PPO to PPO-ptx
  • 5个超实用1688选品技巧!轻松出单999+
  • 蓝牙芯片NRF51822/NRF51802/NRF52810/NRF52811的详解区别
  • 分数计算 中级题目
  • C++青少年简明教程:异常处理
  • 压缩列表(ziplist)
  • 基于LangChain-Chatchat实现的RAG-本地知识库的问答应用[3]-参数配置详细版
  • 【启明智显分享】国产HMI芯片Model系列:平头哥内核,SDK开源贯彻到底!
  • 【刷算法】求1+2+3+...+n
  • golang中接口赋值与方法集
  • java8-模拟hadoop
  • JavaScript的使用你知道几种?(上)
  • python docx文档转html页面
  • react-core-image-upload 一款轻量级图片上传裁剪插件
  • socket.io+express实现聊天室的思考(三)
  • spring boot 整合mybatis 无法输出sql的问题
  • Theano - 导数
  • vue数据传递--我有特殊的实现技巧
  • 从 Android Sample ApiDemos 中学习 android.animation API 的用法
  • 技术:超级实用的电脑小技巧
  • 简单易用的leetcode开发测试工具(npm)
  • 快速构建spring-cloud+sleuth+rabbit+ zipkin+es+kibana+grafana日志跟踪平台
  • 七牛云 DV OV EV SSL 证书上线,限时折扣低至 6.75 折!
  • 少走弯路,给Java 1~5 年程序员的建议
  • 深入体验bash on windows,在windows上搭建原生的linux开发环境,酷!
  • 听说你叫Java(二)–Servlet请求
  • 详解NodeJs流之一
  • 用Canvas画一棵二叉树
  • 再次简单明了总结flex布局,一看就懂...
  • 在electron中实现跨域请求,无需更改服务器端设置
  • 中国人寿如何基于容器搭建金融PaaS云平台
  • k8s使用glusterfs实现动态持久化存储
  • ​Linux·i2c驱动架构​
  • ​一帧图像的Android之旅 :应用的首个绘制请求
  • # Swust 12th acm 邀请赛# [ K ] 三角形判定 [题解]
  • # 移动硬盘误操作制作为启动盘数据恢复问题
  • #FPGA(基础知识)
  • #我与Java虚拟机的故事#连载11: JVM学习之路
  • (附源码)springboot家庭装修管理系统 毕业设计 613205
  • (十六)串口UART
  • (实战篇)如何缓存数据
  • (未解决)macOS matplotlib 中文是方框
  • (转)Linux下编译安装log4cxx
  • .h头文件 .lib动态链接库文件 .dll 动态链接库
  • .mp4格式的视频为何不能通过video标签在chrome浏览器中播放?
  • .net Application的目录
  • .NET NPOI导出Excel详解
  • .NET 事件模型教程(二)