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

c++QT文件操作

1 介绍

        QT的文件操作来源于其抽象基类QIODevice,中用于处理输入输出设备。提供了统一的接口来处理不同类型的数据源,如文件、套接字、缓冲区等。QIODevice 主要用于读取和写入数据,无论数据来自何种源头,都可以通过 QIODevice 统一地进行处理。

2 成员函数和用法

2.1 成员函数

  1. 打开和关闭: 通过 open(QIODevice::OpenMode mode) 函数可以打开 QIODevice,并且需要指定打开的模式,如只读、只写、读写等。关闭 QIODevice 可以使用 close() 函数。

  2. 读取和写入数据: 使用 read(char *data, qint64 maxSize) 函数从 QIODevice 中读取数据,将读取的数据存储在 data 缓冲区中,最大读取量为 maxSize。使用 write(const char *data, qint64 maxSize) 函数将数据写入 QIODevice

  3. 位置和移动: 通过 pos() 函数可以获取当前的读写位置,通过 seek(qint64 pos) 函数可以移动到指定的读写位置。

  4. 判断状态: 可以使用 atEnd() 函数判断是否已经读取到 QIODevice 的末尾。还可以使用 error() 函数判断是否出现了读写错误。

  5. 模式和标志: QIODevice 可以以不同的模式打开,如文本模式和二进制模式。可以使用 QIODevice::TextQIODevice::Binary 标志来设置。

  6. 继承和用法: QIODevice 是一个抽象基类,许多与输入输出相关的类都继承自它,如 QFileQTcpSocketQBuffer 等。你可以根据具体的需求选择合适的派生类进行文件、网络通信或内存数据的读写操作。

2.2 用法

#include <QCoreApplication>
#include <QBuffer>
#include <QDebug>int main(int argc, char *argv[])
{QCoreApplication a(argc, argv);// 创建一个 QBuffer 对象,用于读写内存数据QBuffer buffer;buffer.open(QIODevice::ReadWrite); // 打开为读写模式// 写入数据到缓冲区QByteArray data = "Hello, QIODevice!";buffer.write(data);// 移动读写位置到开头buffer.seek(0);// 从缓冲区读取数据QByteArray readData = buffer.readAll();qDebug() << "Read data: " << readData;return a.exec();
}

3 QCoreApplication

        QCoreApplication是 Qt 框架中用于管理应用程序的基础类,它提供了应用程序事件循环、事件处理和应用程序配置等功能。所有使用 Qt 编写的应用程序都需要至少一个 QCoreApplication 对象作为应用程序的核心。

  1. 应用程序的启动和退出: 、静态函数 int exec() 来、启动应用程序的事件循环,这个函数将一直运行,直到应用程序退出。使用 void quit() 函数来退出事件循环,终止应用程序。

  2. 事件处理: 通过 bool QCoreApplication::sendEvent(QObject *receiver, QEvent *event) 函数可以向指定的对象发送事件。也可以通过 bool QCoreApplication::postEvent(QObject *receiver, QEvent *event, int priority = Qt::NormalEventPriority) 在事件队列中插入一个事件。

  3. 应用程序信息 可以使用 QString QCoreApplication::applicationDirPath() 获取应用程序所在的目录路径,使用 QString QCoreApplication::applicationFilePath() 获取应用程序的完整路径,使用 QString QCoreApplication::applicationName() 获取应用程序的名称等。

  4. 命令行参数: 可以通过 QStringList QCoreApplication::arguments() 获取应用程序的命令行参数列表。

  5. 应用程序类型: Qt 提供了不同类型的应用程序类,如 QGuiApplication 用于 GUI 应用程序,QCoreApplication 用于非 GUI 应用程序等。

4  QIODevice派生类介绍

        当涉及到文件和目录操作时,Qt 提供了一组方便的类来处理,包括 `QFile`、`QFileInfo`、`QDir`、`QTemporaryFile` 和 `QFileSystemWatcher`。

1.  `QFile` 文件的读写操作:提供了打开、关闭、读取、写入和修改文件等功能。可以使用 `QFile` 来处理二进制和文本文件。

2. `QFileInfo` 提供了关于文件和目录的元信息。用来获取文件的属性、路径、扩展名、大小等信息,以及判断文件是否存在、是否可读、是否可写等。

3.   `QDir` 用于操作目录,提供了遍历目录、创建目录、删除目录、列出目录中的文件等功能。还可以用于文件路径的拼接、判断文件是否存在等。

4.  `QTemporaryFile` 用于创建临时文件,临时文件通常在程序运行结束后自动删除。它继承自 `QFile`,提供了创建、打开临时文件的功能。

5.   `QFileSystemWatcher` 可以监视文件和目录的变化,比如文件的创建、删除、修改等。当所监视的文件或目录发生变化时,`QFileSystemWatcher` 会发出相应的信号。

        示例:使用这些类进行文件和目录操作:

```cpp
#include <QFile>
#include <QFileInfo>
#include <QDir>
#include <QTemporaryFile>
#include <QFileSystemWatcher>
#include <QDebug>int main(int argc, char *argv[])
{Q_UNUSED(argc);Q_UNUSED(argv);// 使用 QFile 进行文件读写操作QFile file("example.txt");if (file.open(QIODevice::ReadWrite)) {file.write("Hello, QFile!");file.close();}// 使用 QFileInfo 获取文件信息QFileInfo fileInfo("example.txt");qDebug() << "File size:" << fileInfo.size() << "bytes";qDebug() << "File path:" << fileInfo.filePath();qDebug() << "Is file readable:" << fileInfo.isReadable();// 使用 QDir 进行目录操作QDir dir(".");QStringList fileList = dir.entryList(QDir::Files);qDebug() << "Files in current directory:" << fileList;// 使用 QTemporaryFile 创建临时文件QTemporaryFile tempFile;if (tempFile.open()) {tempFile.write("Temporary content");tempFile.setAutoRemove(true); // 设置临时文件在关闭时自动删除}// 使用 QFileSystemWatcher 监视文件变化QFileSystemWatcher watcher;watcher.addPath("example.txt");QObject::connect(&watcher, &QFileSystemWatcher::fileChanged, [](const QString &path) {qDebug() << "File changed:" << path;});return 0;
}
```

相关文章:

c++QT文件操作

1 介绍 QT的文件操作来源于其抽象基类QIODevice&#xff0c;中用于处理输入输出设备。提供了统一的接口来处理不同类型的数据源&#xff0c;如文件、套接字、缓冲区等。QIODevice 主要用于读取和写入数据&#xff0c;无论数据来自何种源头&#xff0c;都可以通过 QIODevice 统一…...

Jmeter —— jmeter设置HTTP信息头管理器模拟请求头

HTTP信息头管理器 HTTP信息头管理器是在有需要模拟请求头部的时候进行设置的&#xff0c;添加方式 是 右击线程组 -- 配置元件 -- HTTP信息头管理器 可以通过抓包工具或者F12获取http请求的header头部信息&#xff1b;如下图&#xff1a; 复制并点击jmeter中的从剪贴板添加&am…...

vue 图片转pdf

尝试了集中图片转pdf的方式&#xff0c; &#xff08;1&#xff09;最终较为优秀的一种是使用jspdf将图片转为pdf&#xff0c;支持JPG/JPEG/PNG/BMP/TIF/TIFF图片格式转换&#xff0c;详见我的另一篇文章&#xff1a; https://blog.csdn.net/Ann_52547/article/details/1322149…...

20.5 HTML 媒体

1. video视频标签 video视频标签: 是HTML中用于在网页上嵌入视频的元素.常用的视频标签属性: - src属性: 指定视频文件的URL地址. - controls属性: 用于显示视频播放控件(如播放按钮, 进度条等), 使用户能够控制视频的播放. - width和height: 指定视频的宽度和高度. - autopla…...

科大讯飞分类算法挑战赛2023的一些经验总结

引言: ResNet是he kaiming大佬的早年神作&#xff0c;当年直接刷榜各大图像分类任务。ResNet是一种残差网络&#xff0c;咱们可以把它理解为一个子网络&#xff0c;这个子网络经过堆叠可以构成一个很深的网络&#xff0c;而ResNext在其基础上&#xff0c;进行了一定修改完善&am…...

2023年京东按摩仪行业数据分析(京东销售数据分析)

近年来&#xff0c;小家电行业凭借功能与颜值&#xff0c;取代黑电和白电&#xff0c;成为家电市场的主要增长点。在这一市场背景下&#xff0c;颜值更高、功能更丰富、品种更齐全的各类按摩仪&#xff0c;借助新消费和电子商务的风潮&#xff0c;陆续被推上市场。今年&#xf…...

【C语言】进阶指针,超详解,含丰富代码示例

文章目录 前言指针进阶的重点内容1.字符指针2.数组指针3.指针数组4.函数指针5.函数指针数组6. 指向函数指针数组的指针 总结 这里是初阶的链接&#xff0c;方便大家对照查看&#xff01;&#xff01;&#xff01;添加链接描述 前言 大家好呀&#xff0c;今天和大家将指针进阶…...

wireshark入门指北

文章目录 前言安装Linux上wireshark安装 使用捕获的时候添加过滤条件抓取浏览器https内容 附录抓取非浏览器的https流量 前言 本文长期维护&#xff0c;记录使用wireshark的使用过程。 虽然有官方文档-Wireshark User’s Guide&#xff0c;但是不想去慢慢读。应用层的图形软件…...

18、SQL注入之堆叠及WAF绕过注入

目录 堆叠查询注入WAF绕过-SQL注入简要讲解安全狗、宝塔等防护waf策略规则大小写和关键字替换加密解密编码解码等价函数特殊符号反序列化注释符混用更改提交方式Fuzz大法数据库特性垃圾数据溢出HTTP参数污染 实测简易CMS头部注入漏洞Bypass原理分析 堆叠查询注入 stacked inje…...

nodejs+vue+elementui+express旅游出行指南网站_655ms

本文主要介绍了一种基于windows平台实现的旅游出行指南。该系统为用户找到景点信息和酒店信息提供了更安全、更高效、更便捷的途径。本系统有两个角色&#xff1a;管理员和用户&#xff0c;要求具备以下功能&#xff1a; &#xff08;1&#xff09;用户可以浏览主页了解旅游出行…...

【心电图信号压缩】ECG信号压缩与通过三次样条近似重建的ECG信号压缩研究(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…...

matlab使用教程(11)—创建随机数

MATLAB 使用算法来生成伪随机数和伪独立数。这些数在数学意义上并非严格随机和独立的&#xff0c;但它们能够通过各种随机和独立统计测试&#xff0c;并且其计算可以重复&#xff0c;方便用于测试或诊断目的。 rand 、 randi 、 randn 和 randperm 函数是创建随机数数组的主要…...

一、安全世界观

文章目录 1、 Web安全简史1.1 中国黑客简史1.2 黑客技术的发展历程1.3 web安全的兴起 2、黑帽子、白帽子3、安全的本质4、安全三要素5、如何实施安全评估5.1 资产等级划分5.2 威胁分析5.3 风险分析5.4 设计安全方案 6、白帽子兵法6.1 Secure By Default6.2 纵深防御原则6.3 数据…...

爬虫014_文件操作_打开关闭_读写_序列化_反序列化---python工作笔记033

报错,没有指定路径,没有指定路径无法创建文件 这样可以在当前目录下创建一个可写的文件 可以看到找到刚才生成的文件,看看内容...

企业前后端分离软件架构如何设计?

企业前后端分离软件架构的设计涉及到前端和后端的独立性、通信方式、数据流管理等多个方面。下面我将为你介绍一个常见的前后端分离软件架构设计&#xff1a; 1、前端层&#xff1a; 框架选择&#xff1a;选择适合项目需求的前端框架&#xff0c;例如React、Vue.js、Angular等…...

生产执行MES系统:提升企业灵活性和响应速度的关键利器

在竞争激烈的市场环境下&#xff0c;企业需要不断提高其灵活性和响应速度&#xff0c;以适应快速变化的需求和市场动态。生产执行MES&#xff08;Manufacturing Execution System&#xff09;系统作为信息技术的重要应用&#xff0c;为企业提供了强大的工具和平台&#xff0c;能…...

什么是分布式系统,如何学习分布式系统

正文 虽然本人在前面也写过好几篇分布式系统相关的文章&#xff0c;主要包CAP理论&#xff0c;分布式储存与分布式事务&#xff0c;但对于分布式系统&#xff0c;并没有一个跟清晰的概念。分布式系统涉及到很多的技术、理论与协议&#xff0c;很多人也说&#xff0c;分布式系统…...

数据库锁表 Lock wait timeout exceeded; try restarting transaction

锁等待超时 Lock wait timeout exceeded; try restarting transaction&#xff0c;是当前事务在等待其它事务释放锁资源造成的 解决办法 1、数据库中执行如下sql&#xff0c;查看当前数据库的线程情况&#xff1a; show full PROCESSLIST2、再到 INNODB_TRX 事务表中查看&…...

Oracle 知识篇+分区表上的索引由global改为local注意事项

★ 知识点 二、知识点 Local型索引有如下优点 1.Only one index partition must be rebuilt when a maintenance operation other than SPLIT PARTITION or ADD PARTITION is performed on an underlying table partition. 2.The duration of a partition maintenance opera…...

基于2.4G RF开发的无线游戏手柄解决方案

平时喜欢玩游戏的朋友&#xff0c;肯定知道键鼠在某些类型的游戏适配和操作方面&#xff0c;不如手柄。作为一个游戏爱好者&#xff0c;还得配上一个游戏手柄才行。比如动作和格斗、体育游戏&#xff0c;由于手柄更合理的摇杆位置和按键布局&#xff0c;操作起来也是得心应手。…...

Oracle查询表空间大小

1 查询数据库中所有的表空间以及表空间所占空间的大小 SELECTtablespace_name,sum( bytes ) / 1024 / 1024 FROMdba_data_files GROUP BYtablespace_name; 2 Oracle查询表空间大小及每个表所占空间的大小 SELECTtablespace_name,file_id,file_name,round( bytes / ( 1024 …...

IGP(Interior Gateway Protocol,内部网关协议)

IGP&#xff08;Interior Gateway Protocol&#xff0c;内部网关协议&#xff09; 是一种用于在一个自治系统&#xff08;AS&#xff09;内部传递路由信息的路由协议&#xff0c;主要用于在一个组织或机构的内部网络中决定数据包的最佳路径。与用于自治系统之间通信的 EGP&…...

React Native在HarmonyOS 5.0阅读类应用开发中的实践

一、技术选型背景 随着HarmonyOS 5.0对Web兼容层的增强&#xff0c;React Native作为跨平台框架可通过重新编译ArkTS组件实现85%以上的代码复用率。阅读类应用具有UI复杂度低、数据流清晰的特点。 二、核心实现方案 1. 环境配置 &#xff08;1&#xff09;使用React Native…...

Java - Mysql数据类型对应

Mysql数据类型java数据类型备注整型INT/INTEGERint / java.lang.Integer–BIGINTlong/java.lang.Long–––浮点型FLOATfloat/java.lang.FloatDOUBLEdouble/java.lang.Double–DECIMAL/NUMERICjava.math.BigDecimal字符串型CHARjava.lang.String固定长度字符串VARCHARjava.lang…...

多模态商品数据接口:融合图像、语音与文字的下一代商品详情体验

一、多模态商品数据接口的技术架构 &#xff08;一&#xff09;多模态数据融合引擎 跨模态语义对齐 通过Transformer架构实现图像、语音、文字的语义关联。例如&#xff0c;当用户上传一张“蓝色连衣裙”的图片时&#xff0c;接口可自动提取图像中的颜色&#xff08;RGB值&…...

Java入门学习详细版(一)

大家好&#xff0c;Java 学习是一个系统学习的过程&#xff0c;核心原则就是“理论 实践 坚持”&#xff0c;并且需循序渐进&#xff0c;不可过于着急&#xff0c;本篇文章推出的这份详细入门学习资料将带大家从零基础开始&#xff0c;逐步掌握 Java 的核心概念和编程技能。 …...

在鸿蒙HarmonyOS 5中使用DevEco Studio实现录音机应用

1. 项目配置与权限设置 1.1 配置module.json5 {"module": {"requestPermissions": [{"name": "ohos.permission.MICROPHONE","reason": "录音需要麦克风权限"},{"name": "ohos.permission.WRITE…...

UR 协作机器人「三剑客」:精密轻量担当(UR7e)、全能协作主力(UR12e)、重型任务专家(UR15)

UR协作机器人正以其卓越性能在现代制造业自动化中扮演重要角色。UR7e、UR12e和UR15通过创新技术和精准设计满足了不同行业的多样化需求。其中&#xff0c;UR15以其速度、精度及人工智能准备能力成为自动化领域的重要突破。UR7e和UR12e则在负载规格和市场定位上不断优化&#xf…...

Spring AI与Spring Modulith核心技术解析

Spring AI核心架构解析 Spring AI&#xff08;https://spring.io/projects/spring-ai&#xff09;作为Spring生态中的AI集成框架&#xff0c;其核心设计理念是通过模块化架构降低AI应用的开发复杂度。与Python生态中的LangChain/LlamaIndex等工具类似&#xff0c;但特别为多语…...

html css js网页制作成品——HTML+CSS榴莲商城网页设计(4页)附源码

目录 一、&#x1f468;‍&#x1f393;网站题目 二、✍️网站描述 三、&#x1f4da;网站介绍 四、&#x1f310;网站效果 五、&#x1fa93; 代码实现 &#x1f9f1;HTML 六、&#x1f947; 如何让学习不再盲目 七、&#x1f381;更多干货 一、&#x1f468;‍&#x1f…...