当前位置: 首页 > 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;操作起来也是得心应手。…...

国防科技大学计算机基础课程笔记02信息编码

1.机内码和国标码 国标码就是我们非常熟悉的这个GB2312,但是因为都是16进制&#xff0c;因此这个了16进制的数据既可以翻译成为这个机器码&#xff0c;也可以翻译成为这个国标码&#xff0c;所以这个时候很容易会出现这个歧义的情况&#xff1b; 因此&#xff0c;我们的这个国…...

docker详细操作--未完待续

docker介绍 docker官网: Docker&#xff1a;加速容器应用程序开发 harbor官网&#xff1a;Harbor - Harbor 中文 使用docker加速器: Docker镜像极速下载服务 - 毫秒镜像 是什么 Docker 是一种开源的容器化平台&#xff0c;用于将应用程序及其依赖项&#xff08;如库、运行时环…...

前端倒计时误差!

提示:记录工作中遇到的需求及解决办法 文章目录 前言一、误差从何而来?二、五大解决方案1. 动态校准法(基础版)2. Web Worker 计时3. 服务器时间同步4. Performance API 高精度计时5. 页面可见性API优化三、生产环境最佳实践四、终极解决方案架构前言 前几天听说公司某个项…...

【HarmonyOS 5.0】DevEco Testing:鸿蒙应用质量保障的终极武器

——全方位测试解决方案与代码实战 一、工具定位与核心能力 DevEco Testing是HarmonyOS官方推出的​​一体化测试平台​​&#xff0c;覆盖应用全生命周期测试需求&#xff0c;主要提供五大核心能力&#xff1a; ​​测试类型​​​​检测目标​​​​关键指标​​功能体验基…...

Frozen-Flask :将 Flask 应用“冻结”为静态文件

Frozen-Flask 是一个用于将 Flask 应用“冻结”为静态文件的 Python 扩展。它的核心用途是&#xff1a;将一个 Flask Web 应用生成成纯静态 HTML 文件&#xff0c;从而可以部署到静态网站托管服务上&#xff0c;如 GitHub Pages、Netlify 或任何支持静态文件的网站服务器。 &am…...

C++八股 —— 单例模式

文章目录 1. 基本概念2. 设计要点3. 实现方式4. 详解懒汉模式 1. 基本概念 线程安全&#xff08;Thread Safety&#xff09; 线程安全是指在多线程环境下&#xff0c;某个函数、类或代码片段能够被多个线程同时调用时&#xff0c;仍能保证数据的一致性和逻辑的正确性&#xf…...

MySQL用户和授权

开放MySQL白名单 可以通过iptables-save命令确认对应客户端ip是否可以访问MySQL服务&#xff1a; test: # iptables-save | grep 3306 -A mp_srv_whitelist -s 172.16.14.102/32 -p tcp -m tcp --dport 3306 -j ACCEPT -A mp_srv_whitelist -s 172.16.4.16/32 -p tcp -m tcp -…...

Java多线程实现之Thread类深度解析

Java多线程实现之Thread类深度解析 一、多线程基础概念1.1 什么是线程1.2 多线程的优势1.3 Java多线程模型 二、Thread类的基本结构与构造函数2.1 Thread类的继承关系2.2 构造函数 三、创建和启动线程3.1 继承Thread类创建线程3.2 实现Runnable接口创建线程 四、Thread类的核心…...

AI,如何重构理解、匹配与决策?

AI 时代&#xff0c;我们如何理解消费&#xff1f; 作者&#xff5c;王彬 封面&#xff5c;Unplash 人们通过信息理解世界。 曾几何时&#xff0c;PC 与移动互联网重塑了人们的购物路径&#xff1a;信息变得唾手可得&#xff0c;商品决策变得高度依赖内容。 但 AI 时代的来…...

Pinocchio 库详解及其在足式机器人上的应用

Pinocchio 库详解及其在足式机器人上的应用 Pinocchio (Pinocchio is not only a nose) 是一个开源的 C 库&#xff0c;专门用于快速计算机器人模型的正向运动学、逆向运动学、雅可比矩阵、动力学和动力学导数。它主要关注效率和准确性&#xff0c;并提供了一个通用的框架&…...